2016-05-27 8 views
2

は私がある解析する パイソンdateutilにおけるロケール/パーサ

locale.setlocale(locale.LC_TIME, ('de', 'UTF-8')) 

文字列を設定

note_date = parser.parse(result.group(2)) 

が、次のエラーを取得します

Traceback (most recent call last): File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 1531, in globals = debugger.run(setup['file'], None, None, is_module) File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 938, in run pydev_imports.execfile(file, globals, locals) # execute the script File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) File "/Users/adieball/Dropbox/Multiverse/Programming/python/repositories/kindle/kindle2en.py", line 250, in main(sys.argv[1:]) File "/Users/adieball/Dropbox/Multiverse/Programming/python/repositories/kindle/kindle2en.py", line 154, in main note_date = parser.parse(result.group(2)) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/dateutil/parser.py", line 1164, in parse return DEFAULTPARSER.parse(timestr, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/dateutil/parser.py", line 555, in parse raise ValueError("Unknown string format") ValueError: Unknown string format

パーサーが "正しい" dateutil値(ドイツ語)を使用していないことを示すデバッグ・ショーは、まだ英語のものを使用しています。

enter image description here

私はここで何かを明らかに欠けていると確信しているが、それを見つけることができません。

ありがとうございました。

答えて

2

dateutil.parserlocaleを使用していません。 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()) 

また、このような月の名前など他の値、のために働くためにこれを拡張する必要があると思います。

+0

完璧、ありがとう、そのトリックでした。とても有難い。 – f0rd42

+0

正しくリコールすれば、['dateparser'](https://dateparser.readthedocs.io/en/latest/)のような他のロケールを扱う下流のライブラリがあります。おそらく、ロケールのエッジケースの独自のライブラリを維持するよりも、それらの1つを使用するほうが良いでしょう。 – Paul

関連する問題