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

Python—如何根据列上的日期时间戳对文本文件进行排序,python,sorting,indexing,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:字符串索引超出范围”错误 所需输出:我想使用“|”分隔的第二列对文本文件进行排序,并将其输出到另一个文件。您对每一行应用排序,而不

我在下面有一个文本文件:

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:字符串索引超出范围”错误


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

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

>>> 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']

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

由于您的日期格式已经可以排序,您不需要使用
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
列表。排序
是一种就地操作

最后,例如

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