我有一个txt文件,其中第1-5行是所有单词,第6行及以上的内容以timestamp
开头,如下所示:
This is a document1
This is a document2
This is a document3
This is a document4
This is a document5
2019-05-27 07:00:00, value1, value2, value3
2019-05-27 06:38:00, value1, value2, value3
2019-05-27 07:05:00, value1, value2, value3
如何将第6行排在最早时间在顶部的最后一行,在最近时间在下面的最后一行?
这是我根据另一个堆栈溢出问题尝试执行的操作,但是没有用。
lines = sorted(open(outputFile.txt).readlines(), key=lambda line: line[5:-1].split(",")[0])
outFile.close()
答案 0 :(得分:0)
如果您不需要“单线”,则可以执行以下操作:
# Read all lines
with open("file.txt") as f:
lines = f.readlines()
# Keep only from 6th line
lines = lines[5:]
# Sort based on the date of each line
lines.sort(key = lambda l : l.split(',')[0])
未经测试,但应该可以使用。
答案 1 :(得分:0)
您可以将文件读为pandas DataFrame,然后在相应的行上使用sort_values()。
此外,我建议将列转换为它们的类型,并将表转换为整齐的格式->在此,第一列应仅为 datetime
使用这种方法,您基本上会有两行(不强制转换):
df = read_csv('name_of_file.txt', sep='\t', skiprows=5, header=None, names=['first_col'])
df.sort_values('first_col', ascending=True)
答案 2 :(得分:0)
此处(in1.txt是帖子中的数据)
from datetime import datetime
with open('in1.txt') as f:
sorted_lines = sorted([l.strip() for l in f.readlines()][5:],
key=lambda line: datetime.strptime(line.split(",")[0], "%Y-%m-%d %H:%M:%S"))
for line in sorted_lines:
print(line)
输出
2019-05-27 06:38:00, value1, value2, value3
2019-05-27 07:00:00, value1, value2, value3
2019-05-27 07:05:00, value1, value2, value3