检查列表中的日期,验证它,替换某些值并将其转换为日期对象

时间:2018-04-07 19:20:20

标签: python python-3.x

我有一个值列表,我想检查并验证日期值,将它们从字符串转换为日期对象。但是有一个问题,有些日期就像这种类型的字符串“预计在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']

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

有4项更改:

    如果无法解析日期,则
  1. 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
    
  2. 您的日期格式不正确。 %b表示“缩写的月份名称”,但您的月份名称不是缩写。您必须改为使用%B

    for n, i in enumerate(mylist):
        try:
            mylist[n] = datetime.strptime(i, '%d %B %Y')
        except ValueError:
            pass
    
  3. 如果您希望列表中的日期格式为“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
    
  4. 如果字符串以“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
    
  5. 结果:

    ['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']