您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何从文本的Python中的块(或其他语言)解析多个日期

如何从文本的Python中的块(或其他语言)解析多个日期

看着它,最少哈克的方式将修改dateutil解析器一个模糊的多个选项。

parser._parse需要你的字符串,它标记_timelex,然后在定义的数据令牌进行比较parserinfo

在这里,如果令牌不匹配任何东西parserinfo,解析将失败,除非fuzzy是真实的。

我建议您在没有任何已处理的时间标记的情况下允许不匹配,然后当您遇到不匹配的情况时,在那一点处理已解析的数据,然后再次开始寻找时间标记

应该不会耗费太多精力。

当你在等待你的补丁得到滚入…

这是一个小哈克,在图书馆使用非公共职能,但并不需要修改库,而不是尝试和错误。你可能有误报,如果你有一个可以变成浮动,任何单个令牌。您可能需要进一步过滤结果。

from dateutil.parser import _timelex, parser

a = "I like peas on 2011-04-23, and I also like them on easter and my birthday, the 29th of July, 1928"

p = parser()
info = p.info

def timetoken(token):
  try:
    float(token)
    return True
  except ValueError:
    pass
  return any(f(token) for f in (info.jump,info.weekday,info.month,info.hms,info.ampm,info.pertain,info.utczone,info.tzoffset))

def timesplit(input_string):
  batch = []
  for token in _timelex(input_string):
    if timetoken(token):
      if info.jump(token):
        continue
      batch.append(token)
    else:
      if batch:
        yield " ".join(batch)
        batch = []
  if batch:
    yield " ".join(batch)

for item in timesplit(a):
  print "Found:", item
  print "Parsed:", p.parse(item)

产量:

找到:2011年04月23日
解析:2011-04-23 0时〇〇分00秒
发现:1928年7月29日
解析:1928-07-29 00:00:00

Dateutil 2.1出现,为兼容python3编写,并使用“兼容”库调用six。什么是不正确使用它,它不是治疗str的对象为文本。

如果您将字符串作为unicode或类似文件的对象传递,则此解决方案可与dateutil 2.1一起使用:

from cStringIO import StringIO
for item in timesplit(StringIO(a)):
  print "Found:", item
  print "Parsed:", p.parse(StringIO(item))

如果你想在parserinfo设置选项,实例化一个parserinfo并把它传递给解析器对象。例如:

from dateutil.parser import _timelex, parser, parserinfo
info = parserinfo(dayfirst=True)
p = parser(info)
python 2022/1/1 18:34:59 有242人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶