我有一个文本文件:
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])
所需输出:我想使用由'|'分隔的第二列对文本文件进行排序并将其输出到另一个文件。
答案 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))