python:从带有额外字符的datetime字符串计算秒数

2024-07-07 06:08:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为以下输入文件的每一行创建一个新列,该列包含自1970年以来的秒数:

timestamp, air_temp, rh, pressure, dir, spd
2016-11-30T00:00:00Z,-36.50,56.00,624.60,269.00,5.80
2016-11-30T01:00:00Z,-35.70,55.80,624.70,265.00,5.90
2016-11-30T02:00:00Z,-34.80,56.00,625.00,266.00,6.30

第一列表示时间戳,但它包含额外的字符“T”和“Z”。我当前的代码如下:

^{pr2}$

这将返回我想要的结果,但如果输入文件很大,则需要很长时间。如果时间戳没有这些额外的字符,我会直接使用它而不是计算年、月、日和小时。有更好的方法吗?任何想法都将不胜感激。在


Tags: 文件代码dir时间air字符temptimestamp
3条回答

而不是使用字符串切片。为什么不用逗号分隔字符串?并使用datetime模块中的strptime方法将字符串datetime转换为datetime对象。在

示例

import datetime

with open(path, "r") as infile:
    for i in infile.readlines()[1:]:
        dVal = i.strip().split(",")[0]
        print (datetime.datetime.strptime(dVal, '%Y-%m-%dT%H:%M:%SZ')-datetime.datetime(1970, 1, 1)).total_seconds()

输出:

^{pr2}$

可以通过首先在,上拆分文件中的行并将其转换为datetime对象来实现这一点

>>> import datetime

>>> line = '2016-11-30T00:00:00Z,-36.50,56.00,624.60,269.00,5.80'
>>> t = datetime.strptime(line.split(',')[0], '%Y-%m-%dT%H:%M:%SZ')

要转换为秒,只需使用:

^{pr2}$

输入:

import datetime as dt

line = '2016-11-30T00:00:00Z,-36.50,56.00,624.60,269.00,5.80'

# We know the datetime data is always 20 characters long
line_dt_str = line[:20]
line_secs_since_epoch = dt.datetime.strptime(line_dt_str, '%Y-%m-%dT%H:%M:%SZ').timestamp()
print(line_secs_since_epoch)

输出:

^{pr2}$

请注意,调用.timestamp()和从1970年的epoch中减去datetime之间是有区别的。这源于这两种方法如何处理(或不处理)夏令时。阅读更多here

相关问题 更多 >