使用时间戳按python排序文本文件行

时间:2019-06-12 11:34:29

标签: python

我有一个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()

3 个答案:

答案 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