[python] Kódování souborů
geon
geon na post.cz
Úterý Prosinec 20 08:12:13 CET 2005
sorry za předchozí příspěvek - omylem stisknuto Ctrl+Enter ...
Chtěl jsem jenom opravit jeden řádek (pak to nevrací chybu u souborů bez
jakékoliv diakritiky ale vrací pěkně kodovani ascii):
max=-1
Stejně to asi ještě upravím a dám na wiki...
geon
geon napsal(a):
> geon napsal(a):
>
>> 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)
>>
>>
>>
>>
Další informace o konferenci Python