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

Python ValueError:时间数据';140120 1520';与格式不匹配';%Y-%m-%d%H:%m:%S';,python,csv,timestamp,Python,Csv,Timestamp,我犯了这个错误 ValueError: time data '140120 1520' does not match format '%Y-%m-%d %H:%M:%S' 我有一个csv文件,我必须存储在数据库中。csv文件中的数据看起来 # date day time rec_no tem X Z G 140120 20 1520 920 0.00 0.0 51

我犯了这个错误

ValueError: time data '140120 1520' does not match format '%Y-%m-%d %H:%M:%S'
我有一个csv文件,我必须存储在数据库中。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.  
其中day列包含与date最后两位数字相同的信息,因此我忽略了这一列(day)。 因此,为了转换为时间戳,我需要组合日期和时间列。我这样做了,然后重建了列表,如代码所示

我在网上搜索,找到了不同的技术来转换日期和时间格式,但没有命令或解决方案是根据我的需要。 我的代码用于获取上述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”转换为时间戳的提示或示例,我将非常感激,因为我不知道如何处理这个问题。thanx

尝试
'%y%m%d%H%m'
。值得指出的是,你需要使用
%y
而不是
%y
来匹配没有世纪的年份,比如2014年的'14'

from datetime import datetime

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

2014-01-20 15:20:00
更多

编辑: 更新完整代码

140120 1520不是浮点值


删除回复的空格

thanx。我将在上面提到的代码中尝试此操作,并将很快返回。现在我遇到另一个问题ValueError:invalid literal for float():140120 1520您能在上面提到的代码中进行这些更改吗。我想我犯了一些愚蠢的错误。thanx为您带来了很多好处help@Rio请更新原始帖子中的代码,以反映您当前的尝试。我用新错误更新了我的问题。我将非常感谢您的帮助。@Rio您没有更新代码(例如,您仍然显示错误的时间格式字符串)。谢谢您的回复。您的解决方案似乎也起作用,但我现在又遇到了一个错误。ValueError:float()的文本无效:140120 1520。。。。。。。。。
print datetime.datetime.strptime(strDate,'%y%m%d %H%M')