Python - 如何根据列上的日期时间戳对文本文件进行排序

时间:2016-03-18 14:54:32

标签: python sorting indexing

我有一个文本文件:

asd|2016-03-17 14:33:05|asd|
asd|2017-03-17 14:27:25|asd|
asd|2016-03-15 14:27:25|asd|
asd|2016-03-17 14:33:05|asd|
asd|2016-03-16 14:33:05|asd|

我尝试了下面的代码但是我得到“IndexError:字符串索引超出范围”错误。

with open(file) as inf:
    for line in inf:
        data = line.split('|')
        sorted_data = sorted(data, key=lambda line: line[1])

所需输出:我想使用由'|'分隔的第二列对文本文件进行排序并将其输出到另一个文件。

2 个答案:

答案 0 :(得分:1)

您正在对每一行应用排序,而不是对所有行进行排序。您需要在列表中读取文件,然后对其进行排序:

>>> inf = open(file)
>>> lines = inf.readlines()
>>> from datetime import datetime
>>> format = "%Y-%m-%d %H:%M:%S"
>>> sorted_lines = sorted(lines, key=lambda line: datetime.strptime(line.split("|")[1], format))
>>> sorted_lines
['asd|2016-03-15 14:27:25|asd|\n', 'asd|2016-03-16 14:33:05|asd|\n', 'asd|2016-03-17 14:33:05|asd|\n', 'asd|2016-03-17 14:33:05|asd|\n', 'asd|2017-03-17 14:27:25|asd|\n']

之后您可以将新列表写入文件。

答案 1 :(得分:1)

由于您的日期格式已经可以排序,因此您不需要使用datetime,并且可以将此全部简化为

lines = sorted( open(file).readlines(), key=lambda line: line.split("|")[1]) 

或者如果你想在每行的操作次数方面保持简单

lines = open(file).readlines()
lines.sort(key=lambda line: line.split("|")[1]) 

NB list.sort就地操作。

最后,例如

with open('outfile', 'w') as fout:
    fout.write("\n".join(lines))