我想从CSV文件的时间戳列中提取日期。但是显示错误:( time data '1/29/2019 3:30:00.000000000 PM'
与格式'%m/%d/%Y %I:%M:%S.%f %p')
不匹配。
datetime.strptime(my_string,"%m/%d/%Y %I:%M:%S.%f %p")
我已附上CSV文件的屏幕截图。
答案 0 :(得分:2)
您收到错误消息,因为%f
期望最大为6位数字。
与strptime()方法一起使用时,%f伪指令接受右边的1到6位数字和零填充。 %f是对C标准格式字符集的扩展(但在日期时间对象中单独实现,因此始终可用)。
但是在您的示例中,有9个零。
一种解决方法是将格式字符串设置为三个0。
>>> x
'1/29/2019 3:30:00.000000000 PM'
>>> datetime.strptime('1/29/2019 3:30:00.000000000 PM', '%m/%d/%Y %H:%M:%S.%f000 %p')
datetime.datetime(2019, 1, 29, 3, 30)
>>> datetime.strptime('1/29/2019 3:30:00.000000000 PM', '%m/%d/%Y %I:%M:%S.%f000 %p')
datetime.datetime(2019, 1, 29, 15, 30)
答案 1 :(得分:0)
请尝试以下操作:
datetime.strptime(my_string,"%m/%d/%Y %H:%M:%S.%f %p")
这是您具体情况的更详细说明:
%I =小时(12小时制),为零填充的十进制数字。 01,02,…, 12
%H =小时(24小时制),为零填充的十进制数字。 00、01, …,23
由于您使用的是%I ,因此在您的输入文件提供24小时时钟格式时,您的代码将引发错误。
更改为%H 应该可以解决该错误。
以下是Python 2完整strptime语法的链接:
https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
和Python 3:
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
修改
%f可以使用微秒(6个零),但您可以使用9。
由于四舍五入的问题,我的建议是从您的电话号码中切出最后3位数字。
这是一个可能的解决方案:
from datetime import datetime
my_string = "1/29/2019 3:30:00.000000000 PM"
my_string_split = my_string.split()
my_string = my_string_split[0] + " " + my_string_split[1][:-3] + " " + my_string_split[2]
print (datetime.strptime(my_string,"%m/%d/%Y %I:%M:%S.%f %p") )
输出
2019-01-29 15:30:00