Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Leer archivo de texto y convertirlo a lista de enteros

Estas en el tema de Leer archivo de texto y convertirlo a lista de enteros en el foro de Python en Foros del Web. Hola amigos programadores! Tengo un archivo txt con datos guardados de la siguiente manera: Código: 1, 2 3, 4 5, 6 y quiero leerlo y ...
  #1 (permalink)  
Antiguo 23/11/2013, 12:22
 
Fecha de Ingreso: junio-2013
Mensajes: 9
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Leer archivo de texto y convertirlo a lista de enteros

Hola amigos programadores!

Tengo un archivo txt con datos guardados de la siguiente manera:

Código:
1, 2
3, 4
5, 6
y quiero leerlo y que lo convierta a listas

Código:
[1, 2]
[3, 4]
[5, 6]
pero sale otra cosa que no quiero.

el codigo que estoy probando es:

Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2.  
  3.  
  4. archivo=open('/home/xxxx/PRUEBAS_PYTHON/datos.txt','r')
  5. leer_fila= archivo.readlines()
  6. archivo.close()
  7.  
  8. for lista in leer_fila:
  9.      print lista
  10.      dato = list(lista)
  11.      print dato

y el resultado es:
Código:
1,2

['1', ',', '2', '\n']
3,4

['3', ',', '4', '\n']
5,6
['5', ',', '6']
-- Alguna sugerencia para que salga:
Código:
[1, 2]
[3, 4]
[5, 6]
y despues poder hacer
Código:
a = int (lista[-2])
b = int (lista[-1])

Última edición por razpeitia; 23/11/2013 a las 19:22
  #2 (permalink)  
Antiguo 23/11/2013, 14:49
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 11 años, 6 meses
Puntos: 31
Respuesta: Leer archivo de texto y convertirlo a lista de enteros

Creo que tienes un buen lio, quieres tener una lista de dos números (int) y luego quieres dividir la lista en dos elementos a y b convirtiendolos a números (int).

Tienes que analizar porque te sale esa lista y la respuesta es que cada linea es una cadena de texto. Ayudate de los metodos de ese tipo de datos para solucionar los problemas http://docs.python.org/2/library/stdtypes.html#string-methods (si estas usando python 2)
  #3 (permalink)  
Antiguo 23/11/2013, 17:30
 
Fecha de Ingreso: junio-2013
Mensajes: 9
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Leer archivo de texto y convertirlo a lista de enteros

Si amigo, tengo un gran lio.

Pero le estoy picando codigo y debbugeando con pudb para ver si se ve un camino.
  #4 (permalink)  
Antiguo 23/11/2013, 19:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Leer archivo de texto y convertirlo a lista de enteros

Hace años conteste algo parecido en StackOverflow. http://stackoverflow.com/questions/4...844778#4844778

Ajustado a tu caso
Código Python:
Ver original
  1. import csv
  2. with open("input.txt", "rb") as f:
  3.     reader = csv.reader(f)
  4.     for row in reader:
  5.         print map(int, row)

Cambia input.txt por la ruta de tu archivo.
  #5 (permalink)  
Antiguo 23/11/2013, 21:18
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 11 años, 6 meses
Puntos: 31
Respuesta: Leer archivo de texto y convertirlo a lista de enteros

Aunque tienes la solución de razpeitia, me explicare un poco mejor.

No se trata de hacer debug a un código que funciona pero que no funciona como tu quieres, se tiene que analizar desde donde se parte para saber como llegar al resultado deseado.

La línea que ves como
Código:
1,2
en realidad tiene el salto de línea \n y cuando la guardas como variable tienes una cadena de texto (string)
Código:
'1,2\n'
Si usas la función list obtienes el "dato" de tu primera línea.

Por lo que te tocaría eliminar el salto de línea y la coma, pero consiguiendo obtener los numeros separados (quieres obtener '1' y '2', no '12') ó bien eliminarlos de tu lista actual. Y por último convertirlos de string a int.

Para tu ejemplo con números de un digito y lo que llevabas hecho, se puede hacer algo así (con un código muy básico)

Código Python:
Ver original
  1. for lista in leer_fila:
  2.     dato = list()
  3.     for i in lista:
  4.         if i.isdigit():
  5.             dato.append(int(i))
  6.     print lista
  7.     print dato

No es una buena solución comparada con la de razpeitia, pero espero que te ayude en adelante para solventar estas situaciones que tantas veces se nos atraviesan.
  #6 (permalink)  
Antiguo 23/11/2013, 21:24
 
Fecha de Ingreso: junio-2013
Mensajes: 9
Antigüedad: 11 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Leer archivo de texto y convertirlo a lista de enteros

lo hice de la forma mas larga pero salio:

Código Python:
Ver original
  1. import MySQLdb
  2. import string
  3.  
  4.  
  5. archivo=open('/home/juan/PRUEBAS_PYTHON/prueba.txt','r')
  6. lista = archivo.readlines()
  7.  
  8. for dato in lista:
  9.     x = dato.rsplit(',')
  10.     #a = int (x[5])
  11.     #b = int (x[4])
  12.     #c = int (x[3])
  13.     #d = int (x[2])
  14.     e = int (x[1])
  15.     f = int (x[0])
  16.     desordenada = [f,e]
  17.     ordenada= sorted(desordenada)
  18.     #g = ordenada[5]
  19.     #h = ordenada[4]
  20.     #i = ordenada[3]
  21.     #j = ordenada[2]
  22.     k = ordenada[1]
  23.     l = ordenada[0]
  24.     print l, k

GRACIAS A TODOS POR SU APORTE!!!

Última edición por razpeitia; 24/11/2013 a las 17:37
  #7 (permalink)  
Antiguo 23/11/2013, 21:48
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 11 años, 6 meses
Puntos: 31
Respuesta: Leer archivo de texto y convertirlo a lista de enteros

Si tienes una lista (o tupla) puedes asignar variables a cada elemento de la lista, de manera mucho más sencilla
Código Python:
Ver original
  1. ordenada = [1, 2]
  2. l, k = ordenada
  #8 (permalink)  
Antiguo 24/11/2013, 15:18
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 16 años, 1 mes
Puntos: 13
Respuesta: Leer archivo de texto y convertirlo a lista de enteros

Por si te sirve la solución en una linea:

Código Python:
Ver original
  1. lineas = open("a").readlines()
  2. l = [[m.strip() for m in n] for n in [linea.split(",") for linea in lineas]]

Etiquetas: int, list, string
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 10:14.