[python] python ast.literal_eval a čeština
Hynek Fabian
hynek.fabian na firma.seznam.cz
Úterý Září 15 18:09:34 CEST 2009
Chyba je v pouziti ast.literal_eval(). Hle:
>>> type(ast.literal_eval(unicode("'a'")))
<type 'str'>
Z typu unicode se stane typ string, coz je naprosto spravne, protoze modul ast
vidi pythoni syntaxi 'a' coz je string. To ze parsovany retezec je unicode s
tim nema nic moc spolecneho a informace o kodovani se ztrati, resp. z pohledu
pythonu nikdy neexistovala. Predpoklada se tedy, ze zdrojovy retezec je ve
stejnem kodovani jako program, cili dostanete nikoliv predpokladany unicode
ale string v systemovem kodovani - je lehke si toho nevsimnout.
Primitivni reseni by bylo nastavit explicitne kodovani programu -*- deklaraci
v hlavicce a odstranit nadbytecne explictni prekodovani na vystupu.
Spravne reseni by bylo neprasit to modulem ktery je urcen na neco uplne
jineho. A brat s rezervou tutorialy psane stastlivci z ASCII zemi.
Osobne bych se klonil k reseni pomoci prevence - sestrojit stroj casu a
vysvetlit Janu Husovi co si o tech jeho novotach myslime. Nanestesti
"import timemachine" nefunguje, quido si tenhle modul nechava pro sebe :-(
Luboš Melichar (15.9.09):
> Zdravim,
> jsem začátečník a tak dopředu prosím o trpělivost..
>
> Zkouším toto, v souboru mít uložený slovník, případně pole slovníků..
>
> {'cz': 'hezký', 'en': 'nice', 'de': 'schön'}
>
> vyčíst ze souboru, převést na slovník, pracovat s ním, uložit
>
> #VYCTENI ZE SOUBORU
> f = open("db.db")
> text = unicode(f.read(),('cp1250'))
> f.close()
>
> #PRACE S DB
> db = ast.literal_eval(text) #prevod stringu na seznam slovniku
> db['maďarština'] = 'keřmideretvář'
>
> #ZAPIS DO SOUBORU
> text2 = str(db)
> f = open("db2.db")
> f.write(text2.encode('cp1250')) #ulozeni
> f.close()
>
> bohuzel s cestinou mam neprekonatelny problem, ve vystupnim souboru se
> mi to uklada v unicodu.
> kodovani v obou souborech mam samozrejme cp1250.
>
> diky za popostrceni
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
Další informace o konferenci Python