本文介绍了使用dateutil解析多个日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试借助此代码从Python中的字符串中解析多个日期,

I am trying to parse multiple dates from a string in Python with the help of this code,

from dateutil.parser import _timelex, parser
a = "Approve my leave from first half of 12/10/2012 to second half of 20/10/2012 "
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)

并且代码将字符串中的下半年作为第二个日期,并给了我这个错误

and the codes is taking second half from the string as second date and giving me this error,

raise ValueError, "unknown string format"

ValueError: unknown string format

当我将下半部分"更改为第三部分"或第四部分"时,它就可以正常工作.

when i change 'second half' to 'third half' or 'forth half' then it is working all fine.

任何人都可以帮助我解析此字符串吗?

Can any one help me to parse this string ?

推荐答案

您的解析器无法处理timesplit找到的"second",如果将fuzzy参数设置为True,则不会.不会破坏,但也不会产生任何有意义的东西.

Your parser couldn't handle the "second" found by timesplit,if you set the fuzzy param to be True, it doesn't break but nor does it produce anything meaningful.

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

退出:

Found: 12 10 2012
Parsed: 2012-12-10 00:00:00
Found: second
Parsed: 2013-01-11 00:00:00
Found: 20 10 2012
Parsed: 2012-10-20 00:00:00

您必须修正时差或处理错误:

You have to fix the timesplitting or handle the errors:

opt1:

timetoken

opt2:

from cStringIO import StringIO
for item in timesplit(StringIO(a)):
    print "Found:", item
    try:
        print "Parsed:", p.parse(StringIO(item))
    except ValueError:
        print 'Not Parsed!'

退出:

Found: 12 10 2012
Parsed: 2012-12-10 00:00:00
Found: second
Not Parsed!
Parsed: Found: 20 10 2012
Parsed: 2012-10-20 00:00:00

这篇关于使用dateutil解析多个日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 19:29