从列表中删除非日期

时间:2020-06-20 15:19:46

标签: python-3.x datetime

我有一个字符串列表,我想删除不是日期的项目。我只是想检查它们是否是日期,而不是将它们转换为datetime。我正在使用dateutil.parser-如何处理它引起的错误并继续循环?这是我的代码:

from dateutil.parser import parse

def drop_nondates(dates, fuzzy=False):
    for string in dates:
        try: 
            parse(string, fuzzy=fuzzy)
        except:
            dates.remove(string)
            pass
            
    return dates

在小清单上进行测试:

In: drop_nondates( ['January 2018', 'Enero 2018', 'not a date 2018', '2018'] )
>>> ['January 2018', 'not a date 2018', '2018'] 

但所需的输出将是:

['January 2018', '2018'] 

1 个答案:

答案 0 :(得分:0)

请参阅Asocia的评论:在迭代列表时不要修改列表。如果您例如将所有“可分析的”结果附加到新列表中并返回:

from dateutil.parser import parse

def drop_nondates(dates, fuzzy=False):
    result = []
    for string in dates:
        try: 
            parse(string, fuzzy=fuzzy)
        except:
            pass
        else:
            result.append(string)
          
    return result

drop_nondates( ['January 2018', 'Enero 2018', 'not a date 2018', '2018'] )
# ['January 2018', '2018']