簡體   English   中英

Python-如何基於列上的日期時間戳對文本文件進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM