我正在使用 python 的dateutil.parser
工具来解析我从第三方提要获得的一些日期。它允许指定一个默认日期,它本身默认为今天,用于填充解析日期的缺失元素。虽然这通常很有帮助,但我的用例没有合理的默认值,我更愿意将部分日期视为根本没有得到日期(因为它几乎总是意味着我得到了乱码数据)。我写了以下工作:
from dateutil import parser
import datetime
def parse_no_default(dt_str):
dt = parser.parse(dt_str, default=datetime.datetime(1900, 1, 1)).date()
dt2 = parser.parse(dt_str, default=datetime.datetime(1901, 2, 2)).date()
if dt == dt2:
return dt
else:
return None
(此代码段仅查看日期,因为这是我的应用程序所关心的全部内容,但可以扩展类似的逻辑以包含时间组件。)
我想知道(希望)有更好的方法来做到这一点。至少可以说,两次解析相同的字符串以查看它是否填充不同的默认值似乎是对资源的严重浪费。
这是预期行为的一组测试(使用鼻子测试生成器):
import nose.tools
import lib.tools.date
def check_parse_no_default(sample, expected):
actual = lib.tools.date.parse_no_default(sample)
nose.tools.eq_(actual, expected)
def test_parse_no_default():
cases = (
('2011-10-12', datetime.date(2011, 10, 12)),
('2011-10', None),
('2011', None),
('10-12', None),
('2011-10-12T11:45:30', datetime.date(2011, 10, 12)),
('10-12 11:45', None),
('', None),
)
for sample, expected in cases:
yield check_parse_no_default, sample, expected