[英]Python - How to sort a text file based on date time stamp on a column
我在下面有一個文本文件:
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])
所需的輸出:我想使用以“ |”分隔的第二列對文本文件進行排序 並將其輸出到另一個文件。
您正在對每一行進行排序,而不是對所有行進行集體排序。 您需要閱讀列表中的文件,然后對其進行排序:
>>> 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 list.sort
是就地操作。
最后,例如
with open('outfile', 'w') as fout:
fout.write("\n".join(lines))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.