Python按字段排序文本文件

use*_*368 2 python sorting class text-files

我在某个字段对文本文件中的数据进行排序时遇到了一些麻烦.可能会在以后的多个领域..txt是几千行代码.我是python的新手,所以我的代码可能有点乱.例如,这是我将读取的文本文件:

stuff
123 1200 id-aaaa stuart@test.com
322 1812 id-wwww machine-switch@test.com
839 1750 id-wwww gary2-da@test.com
500 0545 id-aaaa abc123@test.com
525 1322 id-bbbb zyx321@test.com
Run Code Online (Sandbox Code Playgroud)

我的代码到目前为止如下:

filelist = open("info.txt").readlines()
splitlist = list()

class data:
    def __init__(self, eventName, time, identity, domain):
        self.evenName = eventName
        self.time = time
        self.identity = identity
        self.domain = domain

for line in filelist:
    filelist = list.split(', ')
    splitlist.append(filelist)

for column in splitlist:
    if (len(column) > 1): #to skip the first line
        eventName = column[0].strip()
        time = column[1].strip()
        identity = column[2].strip()
        domain = column[3].strip()
Run Code Online (Sandbox Code Playgroud)

我想按标识逐行排序.txt文件,然后可能按时间排序.我看到这可以通过python教程中的类来完成,所以我正试着去那条路.请指教.谢谢!

Hug*_*ell 7

with open("info.txt") as inf:
    data = []
    for line in inf:
        line = line.split()
        if len(line)==4:
            data.append(line)

data.sort(key=lambda s:(s[2],s[1]))
Run Code Online (Sandbox Code Playgroud)

如果你想有点发型,

from collections import namedtuple
Input = namedtuple('Input', ('name', 'time', 'identity', 'domain'))

with open("info.txt") as inf:
    inf.next()  # skip header
    data = [Input(*(line.split()) for line in inf]

data.sort(key=lambda s:(s['identity'],s['time']))
Run Code Online (Sandbox Code Playgroud)

如果你真的想要使用一个类,请尝试:

import time

class Data(object):
    def __init__(self, event, time_, identity, domain):
        self.event = event
        self.time = time.strptime(time_, "%H%M")
        self.identity = identity
        self.domain = domain

with open("info.txt") as inf:
    data = []
    for line in inf:
        try:
            data.append(Data(*(line.split()))
        except TypeError:
            # wrong number of arguments (ie header or footer)
            pass

data.sort(key=lambda s:(s.identity,s.time))
Run Code Online (Sandbox Code Playgroud)