[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