我设置
locale.setlocale(locale.LC_TIME, ('de', 'UTF-8'))
要解析的字符串是:
Montag, 11. April 2016 19:35:57
我用:
note_date = parser.parse(result.group(2))
但收到以下错误:
追踪(最近一次通话): 文件" /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py" ;,第1531行,在 globals = debugger.run(setup [' file'],None,None,is_module) 文件" /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py" ;,第938行,在运行中 pydev_imports.execfile(文件,全局,本地)#执行脚本 文件" /Applications/PyCharm.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py",第18行,在execfile中 exec(编译(内容+" \ n",文件,' exec'),glob,loc) File" /Users/adieball/Dropbox/Multiverse/Programming/python/repositories/kindle/kindle2en.py" ;,第250行,在 主(sys.argv中[1:]) File" /Users/adieball/Dropbox/Multiverse/Programming/python/repositories/kindle/kindle2en.py" ;,第154行,主要 note_date = parser.parse(result.group(2)) 文件" /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/dateutil/parser.py",第1164行,解析 return DEFAULTPARSER.parse(timestr,** kwargs) 文件" /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/dateutil/parser.py" ;,第555行,解析 引发ValueError("未知字符串格式") ValueError:未知的字符串格式
调试显示解析器未使用"正确" dateutil值(德语),它仍在使用英语。
我确定我在这里遗漏了一些明显的东西,但却无法找到它。
感谢。
答案 0 :(得分:3)
dateutil.parser
没有使用locale
。您需要继承dateutil.parser.parserinfo
并构建德语等效语:。
from dateutil import parser
class GermanParserInfo(parser.parserinfo):
WEEKDAYS = [("Mo.", "Montag"),
("Di.", "Dienstag"),
("Mi.", "Mittwoch"),
("Do.", "Donnerstag"),
("Fr.", "Freitag"),
("Sa.", "Samstag"),
("So.", "Sonntag")]
s = 'Montag, 11. April 2016 19:35:57'
note_date = parser.parse(s, parserinfo=GermanParserInfo())
您需要将其扩展为适用于其他值,例如月份名称。
答案 1 :(得分:0)
在另一个答案中,我回答了一个简单的Locale aware parseinfo class。这不是世界上所有语言的完整解决方案,但解决了我所有的本地化问题。
这里是:
import calendar
from dateutil import parser
class LocaleParserInfo(parser.parserinfo):
WEEKDAYS = zip(calendar.day_abbr, calendar.day_name)
MONTHS = list(zip(calendar.month_abbr, calendar.month_name))[1:]
您可以使用:
In [1]: import locale;locale.setlocale(locale.LC_ALL, "pt_BR.utf8")
In [2]: from localeparserinfo import LocaleParserInfo
In [3]: from dateutil.parser import parse
In [4]: parse("Ter, 01 Out 2013 14:26:00 -0300", parserinfo=PtParserInfo())
Out[4]: datetime.datetime(2013, 10, 1, 14, 26, tzinfo=tzoffset(None, -10800))
对其进行测试,然后查看原始parseinfo中的类变量,特别是HMS变量。也许需要声明其他变量。