Pregunta

Cada vez que intento abrir un archivo .csv con el comando python fread = open ('input.csv', 'r') Siempre abre el archivo con espacios entre cada carácter. Supongo que hay algo mal con el archivo de texto porque puedo abrir otros archivos de texto con el mismo comando y se cargan correctamente. ¿Alguien sabe por qué un archivo de texto se cargaría así en python?

Gracias.

Actualizar

Ok, lo obtuve con la ayuda de la publicación de Jarret Hardie

este es el código que utilicé para convertir el archivo a ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

¡Gracias!

¿Fue útil?

Solución

La publicación por recursivo es probablemente correcta ... el contenido del archivo probablemente esté codificado con un conjunto de caracteres de múltiples bytes. Si este es el caso, de hecho, es probable que pueda leer el archivo en python sin tener que convertirlo primero fuera de python.

Prueba algo como:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

El indicador 'b' garantiza que el archivo se lea como datos binarios. Necesitará saber (o adivinar) la codificación original ... en este ejemplo, he usado utf-16, pero YMMV. Esto convertirá el archivo a Unicode. Si realmente tiene un archivo con caracteres de múltiples bytes, no recomiendo convertirlo a ascii, ya que podría perder muchos de los caracteres en el proceso.

EDITAR: Gracias por subir el archivo. Hay dos bytes en la parte frontal del archivo que indica que, de hecho, utiliza un amplio conjunto de caracteres. Si tienes curiosidad, abre el archivo en un editor hexadecimal como algunos han sugerido ... verás algo en la versión de texto como 'I.D. |.' (etc). El punto es el byte extra para cada carácter.

El fragmento de código anterior parece funcionar en mi máquina con ese archivo.

Otros consejos

El archivo está codificado en alguna codificación Unicode, pero lo estás leyendo como ascii. Intenta convertir el archivo a ascii antes de usarlo en Python.

No es csv un archivo txt simple con valores separados por comas. Solo intente abrirlo con un editor de texto para ver si el archivo está correctamente configurado.

Para leer un archivo codificado, simplemente puede reemplazar open con codecs.open .

fread = codecs.open('input.csv', 'r', 'utf-16')

Nunca me ocurrió, pero como dijo truppo, debe haber algo mal en el archivo.

Intente abrir el archivo en Excel / BrOffice Calc y vuelva a guardar el archivo como CSV.

Si el problema persiste, pruebe un subconjunto de los datos: fist 10 / last 10 / intermedio 10 líneas del archivo.

Ok, lo obtuve con la ayuda de la publicación de Jarret Hardie

este es el código que utilicé para convertir el archivo a ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

¡Gracias!

Abre el archivo en modo binario, 'rb'. Verifíquelo en un Editor HEX y compruebe si el relleno es nulo '00'. Abra el archivo en algo como Scintilla Text Editor para verificar los caracteres presentes en el archivo.

Esta es la forma rápida y fácil, especialmente si Python no analiza la entrada correctamente

sed 's/ \(.\)/\1/g'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top