【问题标题】:I want to convert date-time to timestamp in a csv file我想将日期时间转换为 csv 文件中的时间戳
【发布时间】:2017-05-17 15:12:12
【问题描述】:

我想将日期时间转换为 csv 文件中的时间戳。日期时间格式位于我的 csv 文件的第 8 列。请帮忙。提前致谢。 这是我目前所拥有的。

这是污染数据(pollution.csv)最后一列是日期时间格式

臭氧、颗粒物、一氧化碳、二氧化硫、二氧化氮、经度、纬度、日期时间

101,94,49,44,87,10.104986076057457,56.23172069428216,2014-08-01 00:05:00
106,97,48,47,86,10.104986076057457,56.23172069428216,2014-08-01 00:10:00
107,95,49,42,85,10.104986076057457,56.23172069428216,2014-08-01 00:15:00
103,90,51,44,87,10.104986076057457,56.23172069428216,2014-08-01 00:20:00
105,94,49,39,82,10.104986076057457,56.23172069428216,2014-08-01 00:25:00
106,92,48,42,77,10.104986076057457,56.23172069428216,2014-08-01 00:30:00
110,87,50,40,81,10.104986076057457,56.23172069428216,2014-08-01 00:35:00
106,91,52,36,82,10.104986076057457,56.23172069428216,2014-08-01 00:40:00
106,88,50,40,85,10.104986076057457,56.23172069428216,2014-08-01 00:45:00

我想将最后一列转换为一组整数值,即时间戳。

我希望我的污染.csv 如下所示。

臭氧、颗粒物、一氧化碳、二氧化硫、二氧化氮、经度、纬度、日期时间

101,94,49,44,87,10.104986076057457,56.23172069428216,1406831700.0
106,97,48,47,86,10.104986076057457,56.23172069428216,1406832000.0
107,95,49,42,85,10.104986076057457,56.23172069428216,1406832300.0
103,90,51,44,87,10.104986076057457,56.23172069428216,1406832600.0
105,94,49,39,82,10.104986076057457,56.23172069428216,1406832900.0
106,92,48,42,77,10.104986076057457,56.23172069428216,1406833200.0
110,87,50,40,81,10.104986076057457,56.23172069428216,1406833500.0
106,91,52,36,82,10.104986076057457,56.23172069428216,1406833800.0
106,88,50,40,85,10.104986076057457,56.23172069428216,1406834100.0

我想把日期时间转换成时间戳。

到目前为止我做了什么

  import time
   t = '2014-08-01 00:05:00'
   ts = time.strptime(t, '%Y-%m-%d  %H:%M:%S')
   timestamp = time.mktime(ts)
   print(timestamp)

我能够得到一个时间戳值。

我的时区 - IST 2017 年 5 月 17 日星期三 16:47:20(印度标准时间)

【问题讨论】:

  • 如果您有任何问题,您可以发布您尝试过的内容,并清楚说明哪些内容不起作用,并提供Minimal, Complete, and Verifiable example。我建议阅读How to Ask 一个好问题。另外,请务必使用tour
  • 非常抱歉先生。这是我第一次在这里提问。我已经更正了这些值。

标签: python csv datetime awk


【解决方案1】:

试试这个:

$ awk 'BEGIN{FS=OFS=","} NR>1{$NF=mktime(gensub(/[-:]/," ","g",$NF))}1' file
ozone,particullate_matter,carbon_monoxide,sulfure_dioxide,nitrogen_dioxide,longitude,latitude,datetime
101,94,49,44,87,10.104986076057457,56.23172069428216,1406869500
106,97,48,47,86,10.104986076057457,56.23172069428216,1406869800
107,95,49,42,85,10.104986076057457,56.23172069428216,1406870100
103,90,51,44,87,10.104986076057457,56.23172069428216,1406870400
105,94,49,39,82,10.104986076057457,56.23172069428216,1406870700
106,92,48,42,77,10.104986076057457,56.23172069428216,1406871000
110,87,50,40,81,10.104986076057457,56.23172069428216,1406871300
106,91,52,36,82,10.104986076057457,56.23172069428216,1406871600
106,88,50,40,85,10.104986076057457,56.23172069428216,1406871900

上面的 mktime() 和 gensub() 使用 GNU awk。如果您愿意,您可以在每个值的末尾添加一个“.0”,但这似乎毫无意义 - 因为您的所有输入都是秒分辨率,所以您永远不会真正在其中获得有意义的值。这与您的预期输出之间的差异几乎可以肯定是由于脚本运行时所在的时区。

【讨论】:

  • 非常感谢先生!这工作得很好:)。感谢您耐心回答我的问题。
【解决方案2】:

您想要的是将日期字符串转换为时间戳:

import datetime

dt = datetime.datetime.strptime("2014-10-28 19:00:09", "%Y-%m-%d %H:%M:%S")
print(dt.timestamp())

你得到:

1414522809.0

要读取 CSV 文件,请查阅文档:csv

这是一个例子:

import io
import csv

with open("your_file.csv", mode="r", encoding="utf-8") as fd:
    reader = csv.reader(fd)
    header = next(iter(reader))
    for row in reader:
        print(row[-1])

你得到:

2014-08-01 00:05:00
2014-08-01 00:10:00
2014-08-01 00:15:00
2014-08-01 00:20:00
2014-08-01 00:25:00
2014-08-01 00:30:00
2014-08-01 00:35:00
2014-08-01 00:40:00
2014-08-01 00:45:00

【讨论】:

  • 非常感谢!但我正在处理一个 csv 文件。我想将整个列转换为时间戳。我对这个概念很陌生。请帮忙。
  • 请阅读官方文档。也可以咨询本站:pymotw.com/3/csv/index.html
  • 非常感谢 :) !
猜你喜欢
  • 2017-06-04
  • 1970-01-01
  • 2017-04-25
  • 2022-01-08
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多