【问题标题】:How can I parse a txt-file to get all timestamps with python?如何解析 txt 文件以使用 python 获取所有时间戳?
【发布时间】:2017-07-14 06:34:57
【问题描述】:

我有一个包含许多时间戳的 txt 文件。所有时间戳如下所示: “1360538289592” 时间戳前后有其他字母,没有数字。如何提取所有时间戳并将它们保存在例如列表中?一个代码示例将不胜感激。提前致谢!

txt 文件中的示例行:

1360753388030   ABC DEFGH
1360753402498   1360753423000   5.0 1504.5  0.0 0.0 45.89715971238911   12.499608526006341
1360753403454   1360753424000   5.0 1424.5  0.0 0.0 42.89715971238911   12.499608526006341
1360753404465   1360753425000   5.0 1104.5  0.0 0.0 49.89715971238911   12.499608526006341

【问题讨论】:

  • 请提供您的文本文件的一部分。

标签: python datetime parsing timestamp


【解决方案1】:

假设您有一个名为 test.txt 的文件,其中包含如下数据:

ABC 1500011086 Test
DEF 1500011074 TEST2
HIJ 1499929271 TEST4

这里的第二列是您的时间戳,这个时间戳是 UNIX 格式的。现在转到编码部分。

import datetime

lines = list(open('test.txt', 'r'))
date_list = []
for line in lines :
    date_list.append(datetime.datetime.fromtimestamp(int(line.split()[1])).strftime('%Y-%m-%dT%H:%M:%S'))

输出:

['2017-07-14T11:14:46', '2017-07-14T11:14:34', '2017-07-13T12:31:11']

我希望这是你想要的......

【讨论】:

  • 谢谢。这应该有效。如果一行中有多个时间戳,我需要更改什么?
  • 在这种情况下,这将完全取决于您是否能够定义数据中的列,因为您正在拆分空间。如果时间戳始终在同一列中,您可以使用此方法,但对您的问题进行编辑,将每个时间戳分配到新行可能会产生误导。
【解决方案2】:

要从您的文本文件中提取所有带有时间戳的值,您可以使用 CSV 库来拆分每一行,然后尝试将每个值转换为有效的 datetime 对象。如果转换成功(例如 1980 年之后),则将它们添加到 timestamps 列表中。例如:

from datetime import datetime
import csv

timestamps = []

with open('input.txt', 'rb') as f_input:
    for row in csv.reader(f_input, delimiter=' ', skipinitialspace=True):
        for value in row:
            try:
                dt = datetime.fromtimestamp(float(value) / 1000.0)

                if dt.year > 1980:
                    timestamps.append(dt)
            except ValueError:
                pass

print timestamps

对于您提供的数据,这将为您提供:

[datetime.datetime(2013, 2, 13, 11, 3, 8, 30000), datetime.datetime(2013, 2, 13, 11, 3, 22, 498000), datetime.datetime(2013, 2, 13, 11, 3, 43), datetime.datetime(2013, 2, 13, 11, 3, 23, 454000), datetime.datetime(2013, 2, 13, 11, 3, 44), datetime.datetime(2013, 2, 13, 11, 3, 24, 465000), datetime.datetime(2013, 2, 13, 11, 3, 45)]

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多