我想创建一个新列,其中包含自1970年以来针对以下输入文件的每一行的秒数:
composer dump-autoloader
第一列代表时间戳,但它包含额外的字符' T'和' Z'。我目前的代码如下:
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
这回报了我想要的东西但输入文件很大需要很长时间。如果时间戳没有这些额外的字符,我会直接使用它而不是计算年,月,日和小时。有没有更好的办法?任何想法都将不胜感激。
答案 0 :(得分: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()
<强>输出:强>
1480464000.0
1480467600.0
1480471200.0
答案 1 :(得分:2)
输入:
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)
输出:
1480482000.0
请注意,调用.timestamp()
和从1970年代减去日期时间之间存在差异。这来自于这两种方法如何处理(或不处理)夏令时。阅读更多here
答案 2 :(得分:0)
您可以首先在,
上的文件中拆分并将其转换为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')
要转换为秒,您只需使用:
>>> int(t.strftime("%s"))
>>> 1480435200