我想为以下输入文件的每一行创建一个新列,其中包含自 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”。我当前的代码如下所示:
i = 0
ip_file.readline()
for line in ip_file:
line = line.strip()
year[i] = int(line[0:4])
month[i] = int(line[5:7])
day[i] = int(line[8:10])
hour[i] = int(line[11:13])
time[i] = (datetime(year[i],month[i],day[i],hour[i])-datetime(1970, 1, 1)).total_seconds()
i += 1
这会返回我想要的,但如果输入文件很大,则需要很长时间。如果时间戳没有那些额外的字符,我会直接使用它而不是计算年、月、日和小时。有没有更好的办法?如有任何想法,我们将不胜感激。
请您参考如下方法:
而不是使用字符串切片。为什么不用逗号分割字符串?并使用 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
