python-3.x - 从列表中删除非日期
问题描述
我有一个字符串列表,我想删除不是日期的项目。我只是想检查它们是否是日期,而不是将它们转换为日期时间。我正在使用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']
解决方案
请参阅 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']
推荐阅读
- java - 独立 Neo4j 服务器的附加类路径
- azure-data-lake - 在 USQL 中对多个列进行不同计数
- android - 水平 RecyclerView 与 ViewPager
- r - 在 R 中使用 gowdis 函数
- android - AAPT:属性“layout_anchorGravity”已经用不兼容的格式定义。AND 25.0.3\aapt.exe'' 以非零退出值 1 结束
- oop - 如何为健身房或商店定义不同类别的优惠?
- javascript - 获取子集合数据
- android - Flutter 会支持动态交付吗
- regex - 在eclipse中搜索和替换正则表达式
- java - 获取 org.springframework.security.authentication.BadCredentialsException: Bad credentials exception Spring security