[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