Foros del Web » Programando para Internet » Python »

Convertir archivos *.csv, *.txt a listas

Estas en el tema de Convertir archivos *.csv, *.txt a listas en el foro de Python en Foros del Web. Hola de nuevo... Pues eso, a decir verdad lo he conseguido con la última línea del archivo importado (*.csv) Tenemos, por ejemplo, este archivo csv ...
  #1 (permalink)  
Antiguo 10/06/2014, 11:36
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Convertir archivos *.csv, *.txt a listas

Hola de nuevo...

Pues eso, a decir verdad lo he conseguido con la última línea del archivo importado (*.csv)

Tenemos, por ejemplo, este archivo csv:

100,200,300
100,500,800
1,11,24
45,340,342

Lo abrimos:

Código Python:
Ver original
  1. texto = open('numeros.csv', 'r')

Y ponemos este código a continuación:

Código Python:
Ver original
  1. listaInt = []
  2.  
  3. cad = texto.readline() # GUARDO LINEAS EN VARIABLE cad
  4.  
  5. lista = list(cad.split(',')) # TRANSFORMO A LISTA
  6.  
  7.  
  8.  
  9. for i in range(len(lista)):
  10.     listaInt.append(int(lista[i]))
  11.  
  12. listaInt.sort()   # ORDENA LA LISTA
  13. print(listaInt)

Cómo resultado me arroja:

[45,340,342]

Osea, una lista. La última línea del ciclo for. Según tengo entendido, cuando hacemos un readline() los datos son strings.

He probado muchas variables de transformación y ciclos For pero no me sale.

Yo quiero que salga así:

[100,200,300]
[100,500,800]
[1,11,24]
[45,340,342]

Otro problema surge, que automaticamente se deberían crear listas para cada línea:

lista_1
lista_2
lista_3
lista_4
...

¿Que concepto estoy errando? Gracias!
  #2 (permalink)  
Antiguo 10/06/2014, 13:28
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Convertir archivos *.csv, *.txt a listas

Tu código debe quedar así:

Código Python:
Ver original
  1. listaInt = []
  2.  
  3. cad = texto.readlines() # GUARDO LINEAS EN VARIABLE cad
  4.  
  5. lista = list(cad.split(',')) # TRANSFORMO A LISTA
  6.  
  7.  
  8.  
  9. for i in range(len(lista)):
  10.     listaInt.append(int(lista[i]))
  11.  
  12. listaInt.sort()   # ORDENA LA LISTA
  13. print(listaInt)

El problema es que vos utilizabas la función readline(), cuando debería ser readlines() o read()

Suerte!
  #3 (permalink)  
Antiguo 10/06/2014, 13:34
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Respuesta: Convertir archivos *.csv, *.txt a listas

Pues con la modificación a readlines, aún me va peor. Ahora me sale este error:

AttributeError: 'list' object has no attribute 'split'
  #4 (permalink)  
Antiguo 10/06/2014, 16:02
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Convertir archivos *.csv, *.txt a listas

Podrías probar el modulo csv que convenientemente parsea esos archivos.

Código Python:
Ver original
  1. import csv
  2. with open("numeros.csv", "rb") as f:
  3.     reader = csv.reader(f)
  4.     next(reader) # Saltar cabecera?
  5.     for i in reader:
  6.         print i
  #5 (permalink)  
Antiguo 11/06/2014, 11:24
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Respuesta: Convertir archivos *.csv, *.txt a listas

Cita:
Iniciado por razpeitia Ver Mensaje
Podrías probar el modulo csv que convenientemente parsea esos archivos.

Código Python:
Ver original
  1. import csv
  2. with open("numeros.csv", "rb")as f:
  3.     reader = csv.reader(f)
  4.     next(reader) # Saltar cabecera?
  5.     for i in reader:
  6.         print i
Gracias por el código. Aunque primero me gustaría saber si se puede hacer con Python sin importar ningún módulo. Para aprender y eso. Me gustara acceder a los módulos cuando ya domine un poco mejor Python.

De todas formas, he probado tú código y he tenido que modificar:

Código Python:
Ver original
  1. open("numeros.csv", "rb")

por:

Código Python:
Ver original
  1. open("numeros.csv", "r")

Ya que me daba error con 'rb'. Parece que leía bytes y no texto.

Igualmente probaré mas adelante tu método. Un saludo!
  #6 (permalink)  
Antiguo 11/06/2014, 12:34
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Convertir archivos *.csv, *.txt a listas

En lugar de imprimir en el for() podrias hacer lo que quieras pero ya tienes una lista por cada fila:

Código Python:
Ver original
  1. # Leer archivos CSV sin libreria
  2.  
  3. import pprint;
  4.  
  5. with open("numeros.csv", "r") as f:
  6.     list_lines = f.readlines()  
  7.    
  8.     for line in list_lines:
  9.         pprint.pprint(line.rstrip('\n').split(','))


OBSERVACIONES:


- Importo pprint solo para visualizar cada lista

- Podrias generar una nueva lista pero es un error de novatos en cualquier lenguaje porque directamente puedes operar como te quedan al momento de imprimir (en vez de imprimir, haces lo que necesitas)
__________________
Salu2!
  #7 (permalink)  
Antiguo 11/06/2014, 12:45
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 9 meses
Puntos: 18
Respuesta: Convertir archivos *.csv, *.txt a listas

Código Python:
Ver original
  1. with open("numeros.csv", "r") as f:
  2.  
  3.     reader = [[int(n) for n in line] for line in (i.rstrip().split(',') for i in f.readlines())]
  4.    
  5. for i in reader:
  6.     print i

Un ejemplo de listas por comprehension anidadas.

Saludos.
  #8 (permalink)  
Antiguo 11/06/2014, 12:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Convertir archivos *.csv, *.txt a listas

Cita:
Iniciado por sukoy Ver Mensaje
Código Python:
Ver original
  1. with open("numeros.csv", "r") as f:
  2.  
  3.     reader = [[int(n) for n in line] for line in (i.rstrip().split(',') for i in f.readlines())]
  4.    
  5. for i in reader:
  6.     print i

Un ejemplo de listas por comprehension anidadas..
Me gusto mucho :aplausos:

Solo que esa sintaxis es el sumus de lo criptico
__________________
Salu2!
  #9 (permalink)  
Antiguo 11/06/2014, 13:38
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
Respuesta: Convertir archivos *.csv, *.txt a listas

Ok. Tomo nota de todas las sugerencias. Pero tengo la duda si lo que yo planteo, se puede realizar sin importar un solo módulo. No digo que se ponga el código, si no, para yo pensar si se puede realizar o como. De hecho, me da igual que sea un archivo *.csv o *.txt.
  #10 (permalink)  
Antiguo 11/06/2014, 13:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Convertir archivos *.csv, *.txt a listas

Que modulo importo Sukoy ??? y yo solo importe para visualizar.. pero tampoco lo necesitaba:

Código Python:
Ver original
  1. # donde ves un import ?
  2.  
  3. with open("numeros.csv", "r") as f:
  4.     list_lines = f.readlines()  
  5.    
  6.     for line in list_lines:
  7.         lista = line.rstrip('\n').split(',')
  8.         print('\n')
  9.         for i in lista:
  10.             print(i)
__________________
Salu2!

Etiquetas: csv, gui, listas, son, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:15.