2016-03-18 33 views
0

下面我有一個文本文件日期時間戳的文本文件進行排序:Python的 - 如何根據上一列

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

所需輸出:我想使用由'|'分隔的第二列對文本文件進行排序。並將其輸出到另一個文件。

回答

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

由於您的日期格式已經是排序,你不需要使用datetime,並且可以簡化這一切到

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

或者,如果你想保持它的簡單,每OPS的數量方面線

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

NBlist.sort就地操作。

最後,例如,

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