[python] Kódování souborů

geon geon na post.cz
Úterý Prosinec 20 08:09:25 CET 2005


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