ValueError:时间数据'140120 1520'与格式'%Y-%m-%d%H不匹配:%M:%S'

时间:2017-01-19 12:23:16

标签: python csv timestamp

我收到了这个错误

ValueError: time data '140120 1520' does not match format '%Y-%m-%d %H:%M:%S'

我有一个csv文件,我必须存储在db中。 csv文件中的数据看起来

# date   day  time   rec_no   tem        X        Z             G       

140120    20  1520   920      0.00       0.0    51           0.00         
140120    20  1521   921      37.73      46     -596.05      1.21     
140120    20  1522   922      31.11      42     31.4000      0.50      
140120    20  1523   923      0.00       0.0    -451.50      0.00         
140120    20  1524   924      0.00       0.0    -31.500      0.00      

我的问题是我必须将第一列(日期)和第三列(时间)组合在一起,并根据纪元时间将其转换为时间戳,然后再存储在MySQL数据库中。 传感器的日期格式,我们在csv文件中得到的是

140120 
14 represent 2014, 01 represent the month (January) and 20 represent day.

时间是

1520
15 represent hour and 20 represent minute. and nothing for seconds 
so we can append 00 for seconds.  

其中日列包含与日期最后2位相同的信息,因此我忽略了此列(日)。 所以为了转换成时间戳,我需要结合日期和时间列。我做了这个,然后重建列表,如我的代码所示。

我在网上搜索并发现了不同的技术来转换日期和时间格式,但根据我的需要没有命令或解决方案。 我获取上述csv文件数据并转换时间戳的代码如下。

with open(item[1]) as f:
        lines = f.readlines()
    for k, line in enumerate(lines):
        if k >= (int(skip_header_line) + int(index_line_number)):
            data_tmp = line.split() 
            print data_tmp  # i got ['140120', '20', '1520', '920', '0.00', '0.0', '51', '0.00', '0', '0.00', '0', '0.00']
            newcolumn = data_tmp[0] + ' ' + data_tmp[2]
            data = [newcolumn] + data_tmp[3:] # re-build the list so we get 
                                              ['140120 1520', '920', '0.00', '0.0', '-31.50', '0.00', '0', '0.00', '0', '0.00']

            strDate = data[0].replace("\"", "")
            print strDate  # i got here  140120 1520
            timestamp = datetime.datetime.strptime(strDate,
                                                   '%Y-%m-%d %H:%M:%S')
            ts = calendar.timegm(timestamp.timetuple())
            data_buffer = []
            for val in data_tmp:
                if val == " ":
                    val = None
                    data_buffer.append(val)
                else:
                    data_buffer.append(float(val))
            cursor.execute(add_data, data_buffer)
            cnx.commit()

cursor.close()
cnx.close()

如果有人给我一个提示或示例将'140120 1520'转换为时间戳,我会非常感激,因为我不知道如何处理这个问题。感谢名单

2 个答案:

答案 0 :(得分:2)

试试'%y%m%d %H%M'。值得指出的是,您需要使用%y代替%Y才能匹配没有世纪的年代,例如' 14' 2014年。

from datetime import datetime

s = '140120 1520'
print(datetime.strptime(s, '%y%m%d %H%M'))

<强>输出

2014-01-20 15:20:00

答案 1 :(得分:1)

print datetime.datetime.strptime(strDate,'%y%m%d %H%M')

了解更多reference

编辑: 更新完整代码

140120 1520不是浮动值

删除空格