[python] Kódování souborů
geon
geon na post.cz
Pondělí Prosinec 19 20:57:32 CET 2005
Martin Blazik napsal(a):
>Cusik,
>tenhle algoritmus ma ale jeden problem. U vetsiny textu dostanes nekolik
>moznych kodovani. Podobny problem jsem uz pred mnoha lety resil v jinem
>prog jazyce a postupoval jsem tak, ze jsem v kazdem typu kodovani
>pocital znaky s diakritikou. Vyhralo to kodovani, ktere jich melo
>nejvice. Ani tato metoda neni 100%, ale pro vetsinu pripadu dava pomerne
>dobre vysledky.
>
>
>
Díky za to! Dává to přijatelné výsledky: (možná by šel omezit počet
načítaných bytů u velkých souborů, možná zefektivnit kod ...)
# -*- coding: cp1250 -*-
def tryEncodings(text):
encodings = (
'ascii',
'iso-8859-2',
'cp1250',
'cp852',
'utf-8'
)
cestina=u"áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ"
class enc:
kodovani=None
pocet=0
encoding = []
for e in encodings:
try:
#text.decode(e)
unicode(text,e)
except (UnicodeEncodeError, UnicodeDecodeError):
pass
else:
kod=enc()
kod.kodovani=e
encoding.append(kod)
max=0
for kod in encoding:
e=kod.kodovani
for znak in unicode(text,e):
if znak in cestina:
kod.pocet=kod.pocet+1
if kod.pocet>max:
max=kod.pocet
Kod=kod.kodovani
return Kod
import os, sys
seznam =[jmeno for jmeno in os.listdir('.') if os.path.isfile(jmeno)]
for jmeno in seznam:
text=file(jmeno).read()
print jmeno, tryEncodings(text)
--
geon
Vyjímka je pravidlo. Rekurzivní.
Další informace o konferenci Python