解析使用dateutil
问题描述:
我试图从Python中的字符串与此代码的帮助解析多个日期多个日期,解析使用dateutil
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)
和代码从字符串作为第二次约会,并采取秒半给我这个错误,
raise ValueError, "unknown string format"
ValueError: unknown string format
当我改变“下半场”到“第三半”或“半来回”
那么它工作的所有罚款。
任何人都可以帮我解析这个字符串吗?
答
解析器无法处理"second"
通过timesplit
发现,如果将fuzzy
参数去是True
,它不会破坏,但也不会产生任何有意义的事。
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
你必须修复timesplitting或处理错误:
OPT1:
失去info.hms
从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
答
如果你只需要日期,可以用正则表达式提取出来,并与日期的作品。
a = "Approve my leave from first half of 12/10/2012 to second half of 20/10/2012 "
import re
pattern = re.compile('\d{2}/\d{2}/\d{4}')
pattern.findall(a)
['12/10/2012', '20/10/2012']