首页 > 解决方案 > 从列表中删除非日期

问题描述

我有一个字符串列表,我想删除不是日期的项目。我只是想检查它们是否是日期,而不是将它们转换为日期时间。我正在使用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'] 

标签: python-3.xdatetime

解决方案


请参阅 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']

推荐阅读