2012-06-18 14 views
12

Quiero leer un archivo que también contiene alemán y no solo caracteres. He descubierto que puedo hacer como esteLeer un archivo de texto con caracteres no ASCII en una codificación desconocida

>>> import codecs 
    >>> file = codecs.open('file.txt','r', encoding='UTF-8') 
    >>> lines= file.readlines() 

Esto funciona cuando trato de ejecutar mi trabajo en Python IDLE pero cuando intento ejecutarlo desde otro lugar no da resultado correcto. ¿Tienes una idea?

+0

¿Qué versión de python estás usando? – Jeff

+1

Depende de qué codificación se guardó el archivo. iso8859-1 es probablemente una buena suposición si no es UTF-8. – geoffspear

+0

python3.1. ¿De verdad cómo vemos la versión actual que usamos? – indiag

Respuesta

17

Necesita saber en qué codificación de caracteres está codificado el texto. Si no sabe eso de antemano, puede intentar adivinarlo con el módulo chardet. En primer lugar instalarlo:

$ pip install chardet 

Entonces, por ejemplo, leer el archivo en modo binario:

>>> import chardet 
>>> chardet.detect(open("file.txt", "rb").read()) 
{'confidence': 0.9690625, 'encoding': 'utf-8'} 

Entonces:

>>> import unicodedata 
>>> lines = codecs.open('file.txt', 'r', encoding='utf-8').readlines() 
+1

¿De dónde vienen los 'codecs'? – iMitwe

+0

Tiene que importar códecs en la parte superior de su archivo: 'import codecs' – duhaime

0

Creo que el archivo está siendo leído correctamente, pero está utilizando la codificación incorrecta cuando sale. Esto se basa en el hecho de que obtienes los resultados adecuados en IDLE.

Sugeriría intentar usar print(line.encode('utf-8')) pero me temo que no sé si Python 3 imprimirá un objeto bytes correctamente.

Cuestiones relacionadas