convertir nombres de archivo de latin1 a utf8

Germán Poó Caamaño gpoo en ubiobio.cl
Mie Mar 21 14:30:23 CLT 2007


On Wed, 2007-03-21 at 10:43 -0400, Alvaro Herrera wrote:
> [...] 
> Hmm.  Gracias Germán.  Esta solución programática me sirvió bastante,
> sobre todo para darme cuenta por qué el convmv no me había servido.
> Después de jugar un rato me di cuenta que el problema no es realmente
> convertir Latin-1 en UTF8, sino que convertir desde "algun charset" a
> UTF8, donde el charset en realidad debe ser determinado por
> experimentación.  Algunos archivos tienen nombres en Latin-1, otros en
> Win-1252, y otros en IBM cp850.  Así que es una ensalada que debo
> adivinar, cada archivo por separado :-(  (Lo malo es que sin saber
> alemán es más difícil darse cuenta si la transliteración tiene sentido o
> no ... pero creo que en la mayoría de los casos la inspección simple es
> suficiente)

¿Y cómo te funcionaba antes?

> Germán, una pregunta, ¿cómo hago para que os.walk no recorra los
> subdirectorios recursivamente?

Si no quieres ningún directorio recursivo, creo que es más 
conveniente usar os.listdir.  Con os.walk se pueden saltar 
directorios, por la vía de removerlos de 'dirs', el cual se
procesa en cada iteración.

Tal vez se podría escribir de la siguiente forma:
        
        import os, sys
        from os.path import isfile, join
        
        topdir = sys.argv[1]
        dirs = os.listdir(topdir)
        files = [join(topdir, f) for f in dirs if isfile(join(topdir,
        f))]
        
        for f in files:
        	...

Se vería más sencillo, sino fuera porque hay que tener la ruta del
archivo, por eso el uso de os.path.join (join).

La idea es algo como:
        files =  [f for f in dirs if isfile(f)]

-- 
Germán Poó Caamaño
Concepción - Chile



Más información sobre la lista de distribución Linux