Python-Ref > String manipulation > Unicode > Accessing unicode files
 
 

<-^^->
Klíčová slova
Moduly
Knihovní funkce

Accessing unicode files

How to read and write files in a specific encoding transparently, without troubling yourself with the encode–decode cycle.
The module codecs provides a way to open a file with specific encoding a transparently access its content as unicode strings.
Expand/Shrink
utf-8.2.txt [utf-8]
The following text is in Czech, enjoy.

"Každej nemůže bejt chytrej, pane obrlajtnant," řekl přesvědčivě Švejk, "ti hloupí musejí dělat
výjimku, poněvadž kdyby byl každej chytrej, tak by bylo na světě tolik rozumu, že by z toho byl
každej druhej člověk úplně blbej. Kdyby například, poslušně hlásím, pane obrlajtnant, znal každej
zákony přírodní a doved by si vypočítat vzdálenosti nebeský, tak by jenom vobtěžoval svoje okolí,
jako ňákej pan Čapek, kterej chodil ke 'Kalichu' do hospody a v noci vždycky vyšel z výčepu na
ulici, rozhlížel se po hvězdnatej vobloze, a když se vrátil, chodil vod jednoho k druhýmu a říkal:
'Dneska krásně svítí Jupiter, ty nevíš, pacholku, ani, co máš nad hlavou. To jsou vzdálenosti, kdyby
tě, lumpe, vystřelili z děla, tak bys tam rychlostí dělový kule letěl miliony a miliony let.' Bejval
přitom tak sprostej, že potom vobyčejně vyletěl z hospody sám, vobyčejnou rychlostí elektrický
tramvaje, asi tak, pane obrlajtnant, deset kilometrů za hodinu.

Nebo máme například, pane obrlajtnant, brabence..." 


 
Zdroj: (unicode4-1.py)
  1   """this program will recode a file from utf-8 to iso-8859-2"""
  2   
  3   import codecs
  4   
  5   inp = codecs.open( "utf-8.2.txt", "r", "utf-8")  # open the file as utf-8
  6   out = codecs.open( "iso-8859-2.txt", "w", "iso-8859-2")  # this as iso-8859-2
  7   
  8   for line in inp:
  9       out.write( line)
 10   
 11   inp.close()
 12   out.close()
iso-8859-2.txt [iso-8859-2]
The following text is in Czech, enjoy.

"Každej nemůže bejt chytrej, pane obrlajtnant," řekl přesvědčivě Švejk, "ti hloupí musejí dělat
výjimku, poněvadž kdyby byl každej chytrej, tak by bylo na světě tolik rozumu, že by z toho byl
každej druhej člověk úplně blbej. Kdyby například, poslušně hlásím, pane obrlajtnant, znal každej
zákony přírodní a doved by si vypočítat vzdálenosti nebeský, tak by jenom vobtěžoval svoje okolí,
jako ňákej pan Čapek, kterej chodil ke 'Kalichu' do hospody a v noci vždycky vyšel z výčepu na
ulici, rozhlížel se po hvězdnatej vobloze, a když se vrátil, chodil vod jednoho k druhýmu a říkal:
'Dneska krásně svítí Jupiter, ty nevíš, pacholku, ani, co máš nad hlavou. To jsou vzdálenosti, kdyby
tě, lumpe, vystřelili z děla, tak bys tam rychlostí dělový kule letěl miliony a miliony let.' Bejval
přitom tak sprostej, že potom vobyčejně vyletěl z hospody sám, vobyčejnou rychlostí elektrický
tramvaje, asi tak, pane obrlajtnant, deset kilometrů za hodinu.

Nebo máme například, pane obrlajtnant, brabence..." 


 
Doba běhu: 22.6 ms
The same thing is shown in the code below, using the encode and decode methods.
Expand/Shrink
utf-8.2.txt [utf-8]
The following text is in Czech, enjoy.

"Každej nemůže bejt chytrej, pane obrlajtnant," řekl přesvědčivě Švejk, "ti hloupí musejí dělat
výjimku, poněvadž kdyby byl každej chytrej, tak by bylo na světě tolik rozumu, že by z toho byl
každej druhej člověk úplně blbej. Kdyby například, poslušně hlásím, pane obrlajtnant, znal každej
zákony přírodní a doved by si vypočítat vzdálenosti nebeský, tak by jenom vobtěžoval svoje okolí,
jako ňákej pan Čapek, kterej chodil ke 'Kalichu' do hospody a v noci vždycky vyšel z výčepu na
ulici, rozhlížel se po hvězdnatej vobloze, a když se vrátil, chodil vod jednoho k druhýmu a říkal:
'Dneska krásně svítí Jupiter, ty nevíš, pacholku, ani, co máš nad hlavou. To jsou vzdálenosti, kdyby
tě, lumpe, vystřelili z děla, tak bys tam rychlostí dělový kule letěl miliony a miliony let.' Bejval
přitom tak sprostej, že potom vobyčejně vyletěl z hospody sám, vobyčejnou rychlostí elektrický
tramvaje, asi tak, pane obrlajtnant, deset kilometrů za hodinu.

Nebo máme například, pane obrlajtnant, brabence..." 


 
Zdroj: (unicode4-2.py)
  1   """this program will recode a file from utf-8 to iso-8859-2"""
  2   
  3   inp = file( "utf-8.2.txt", "r")
  4   out = file( "iso-8859-2.txt", "w")
  5   
  6   text = inp.read().decode( 'utf-8')
  7   out.write( text.encode( 'iso-8859-2'))
  8   
  9   inp.close()
 10   out.close()
iso-8859-2.txt [iso-8859-2]
The following text is in Czech, enjoy.

"Každej nemůže bejt chytrej, pane obrlajtnant," řekl přesvědčivě Švejk, "ti hloupí musejí dělat
výjimku, poněvadž kdyby byl každej chytrej, tak by bylo na světě tolik rozumu, že by z toho byl
každej druhej člověk úplně blbej. Kdyby například, poslušně hlásím, pane obrlajtnant, znal každej
zákony přírodní a doved by si vypočítat vzdálenosti nebeský, tak by jenom vobtěžoval svoje okolí,
jako ňákej pan Čapek, kterej chodil ke 'Kalichu' do hospody a v noci vždycky vyšel z výčepu na
ulici, rozhlížel se po hvězdnatej vobloze, a když se vrátil, chodil vod jednoho k druhýmu a říkal:
'Dneska krásně svítí Jupiter, ty nevíš, pacholku, ani, co máš nad hlavou. To jsou vzdálenosti, kdyby
tě, lumpe, vystřelili z děla, tak bys tam rychlostí dělový kule letěl miliony a miliony let.' Bejval
přitom tak sprostej, že potom vobyčejně vyletěl z hospody sám, vobyčejnou rychlostí elektrický
tramvaje, asi tak, pane obrlajtnant, deset kilometrů za hodinu.

Nebo máme například, pane obrlajtnant, brabence..." 


 
Doba běhu: 21.4 ms
Failing to specify the output encoding will result in a crash.
Expand/Shrink
utf-8.2.txt [utf-8]
The following text is in Czech, enjoy.

"Každej nemůže bejt chytrej, pane obrlajtnant," řekl přesvědčivě Švejk, "ti hloupí musejí dělat
výjimku, poněvadž kdyby byl každej chytrej, tak by bylo na světě tolik rozumu, že by z toho byl
každej druhej člověk úplně blbej. Kdyby například, poslušně hlásím, pane obrlajtnant, znal každej
zákony přírodní a doved by si vypočítat vzdálenosti nebeský, tak by jenom vobtěžoval svoje okolí,
jako ňákej pan Čapek, kterej chodil ke 'Kalichu' do hospody a v noci vždycky vyšel z výčepu na
ulici, rozhlížel se po hvězdnatej vobloze, a když se vrátil, chodil vod jednoho k druhýmu a říkal:
'Dneska krásně svítí Jupiter, ty nevíš, pacholku, ani, co máš nad hlavou. To jsou vzdálenosti, kdyby
tě, lumpe, vystřelili z děla, tak bys tam rychlostí dělový kule letěl miliony a miliony let.' Bejval
přitom tak sprostej, že potom vobyčejně vyletěl z hospody sám, vobyčejnou rychlostí elektrický
tramvaje, asi tak, pane obrlajtnant, deset kilometrů za hodinu.

Nebo máme například, pane obrlajtnant, brabence..." 


 
Zdroj: (unicode4-3.py)
  1   """this program will recode a file from utf-8 to iso-8859-2"""
  2   
  3   inp = file( "utf-8.2.txt", "r")
  4   out = file( "iso-8859-2.txt", "w")
  5   
  6   text = inp.read().decode( 'utf-8')
  7   out.write( text)
  8   
  9   inp.close()
 10   out.close()
stderr:
Traceback (most recent call last):
  File "unicode4-3.py", line 7, in ?
    out.write( text)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u017e' in position 43: ordinal not in range(128)
iso-8859-2.txt [iso-8859-2]
Doba běhu: 21.1 ms