我有一个值列表,我想检查并验证日期值,将它们从字符串转换为日期对象。但是有一个问题,有些日期就像这种类型的字符串“预计在2018年5月” 我想将“预期2018年5月”改为“2018年5月1日”,然后转换为日期对象
这是我的清单:
mylist= ['13 April 2018','Mercury','0','13 April 2018', 'October', '59','27 April 2018','Kaala','0','27 April 2018', 'Adityam','34','Expected in May 2018','XXX','99']
到目前为止,这是我的代码:
for n, i in enumerate(mylist):
if i == datetime.strptime(i, '%d %b %Y'):
mylist[n] = datetime.strptime('12 Dec 2016', '%d %b %Y')
pprint.pprint(mylist)
以上列表的最终输出应为:
mylist= ['2018-04-13 00:00:00','Mercury','0','2018-04-13 00:00:00', 'October', '59','2018-04-27 00:00:00','Kaala','0','2018-04-27 00:00:00', 'Adityam','34','2018-05-01 00:00:00','XXX','99']
任何帮助将不胜感激
答案 0 :(得分:2)
有4项更改:
datetime.strptime
会抛出ValueError,因此您必须将if i == datetime.strptime(i, '%d %b %Y'):
替换为try: ... except:
块:
for n, i in enumerate(mylist):
try:
mylist[n] = datetime.strptime(i, '%d %b %Y')
except ValueError:
pass
您的日期格式不正确。 %b
表示“缩写的月份名称”,但您的月份名称不是缩写。您必须改为使用%B
:
for n, i in enumerate(mylist):
try:
mylist[n] = datetime.strptime(i, '%d %B %Y')
except ValueError:
pass
如果您希望列表中的日期格式为“2018-04-13 00:00:00”,则必须使用datetime.strftime
格式化它们:
for n, i in enumerate(mylist):
try:
mylist[n] = datetime.strptime(i, '%d %B %Y').strftime('%Y-%m-%d 00:00:00')
except ValueError:
pass
如果字符串以“Expected in”开头,请将其替换为“01”:
for n, i in enumerate(mylist):
if i.startswith('Expected in '):
i = '01' + i[11:]
try:
mylist[n] = datetime.strptime(i, '%d %B %Y').strftime('%Y-%m-%d 00:00:00')
except ValueError:
pass
结果:
['2018-04-13 00:00:00',
'Mercury',
'0',
'2018-04-13 00:00:00',
'October',
'59',
'2018-04-27 00:00:00',
'Kaala',
'0',
'2018-04-27 00:00:00',
'Adityam',
'34',
'2018-05-01 00:00:00',
'XXX',
'99']