Codificacion y nombres de archivos

Oswaldo Hernández listas en soft-com.es
Lun Jun 18 10:41:48 CEST 2007


Hola a todos,

No se si es por el calor del verano, pero llevo todo el fin de semana peleandome con lo siguiente:

He realizado una nueva instalacion con debian etch, la codificacion del sistema es:
server:/datos# locale
LANG=es_ES.UTF-8
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=


Sobre esta instalacion he copiado los datos de otro disco que tenia debian sarge con codificacion 
ISO8859-15.

La copia la he realizado directamente, instalando el disco en el equipo, haciendo un mount de la 
particion (ext2) y un cp -a.

El problema son los nombres de los archivos, los usuarios de ese servidor guardaban muchos archivos 
(usando samba) con acentos, eñes, etc. en los nombres de los archivos.

Bueno, para solucionar esto estoy intentado hacer un script python que lea el directorio, 
recodifique los nombres y renombre los archivos, pero no doy con ello.

El script es el siguiente:

#!/usr/bin/python
# -*- coding: UTF-8 -*-


# lectura de directorios y rename de archivos de ISO8859-1  utf-8

import os
import sys
import locale

print "Codificacion local: %s" % sys.getdefaultencoding()

for root, dir, files in os.walk("."):
         # archivos
         for f in files:
                 try:
                         fd = f.decode("iso-8859-15")
                         if fd != f:
                                 print "renombrar %s -> %s" & (f, fd)
                                 # renombrar
                                 # ...

                 except Exception, e:
                         print "Excepcion:%s" % e
                         print "Error decode en %s" % f


El scriupt tira la excepcion :
'utf8' codec can't decode byte 0x80 in position 1: unexpected code byte

Alguna idea?

-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************




Más información sobre la lista de distribución Python-es