[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