问题描述
我正在尝试借助此代码从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解析多个日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!