Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Leer matriz .txt i guardalra en lista de listas

Estas en el tema de Leer matriz .txt i guardalra en lista de listas en el foro de Python en Foros del Web. Muy buenas, Soy primerizo en python y necesito leer un archivo txt que contiene una matriz i guardarla en una lista de listas. El formato ...
  #1 (permalink)  
Antiguo 06/03/2013, 05:37
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Leer matriz .txt i guardalra en lista de listas

Muy buenas,

Soy primerizo en python y necesito leer un archivo txt que contiene una matriz i guardarla en una lista de listas.
El formato del fitxero es el siguiente:
0
0 2
0 0 3
0 2 0 4
2 5 0 6 4
....
Y el resultado que quiero conseguir seria [[0],[0,2][0, 0 ,3][0, 2 ,0 ,4] etc]

El problema viene que solo leo el primer elemento, no se como cambiar de columna le resulta que obtengo en [[0]].

Mi codigo es el siguiente
Código:
def leerarchivo(nArchivo):
    archivo = open (nArchivo,'r')
    linia='0'
    LlCostes = []
    Lltotal = []
    
    #while len(l_llegida)>0:
    linia = archivo.readline().split(' ')
    columnas = archivo.read
    
    for i in linia:
        
            LlCostes.append(int(i))
            Lltotal.append(LlCostes)

    print Lltotal
          

    
   
def main():

    leerarchivo('Matriu.txt')

    
    raw_input()

if __name__ == "__main__":
    main()
  #2 (permalink)  
Antiguo 06/03/2013, 06:57
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Leer matriz .txt i guardalra en lista de listas

El problema es que estás leyendo una sola línea (haces readline() una sola vez). Si querés continuar leyendo el archivo de esta forma, te recomiendo hacer
Código Python:
Ver original
  1. for linea in archivo.readlines(): # lee todas las líneas del archivo, conserva saltos de línea
  2.     partes_linea = linea.split()
  3. ...
Pero te propongo un cambio: en Python podés iterar sobre las líneas de un archivo simplemente usando for:
Código Python:
Ver original
  1. matriz = []
  2. archivo = open('archivo)'
  3. for linea in archivo:
  4.     matriz.append(linea.strip().split())
  5. archivo.close()
strip() elimina espacios al principio y al final (incluyendo el caracter de fin de línea). split() parte la cadena en los espacios.

Una forma más compleja pero equivalente:
Código Python:
Ver original
  1. with open('archivo') as archivo:
  2.     matriz = [ l.strip().split() for l in archivo ]

Saludos
  #3 (permalink)  
Antiguo 06/03/2013, 08:53
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: Leer matriz .txt i guardalra en lista de listas

También puedes usar el modulo cvs para este trabajo.

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

input.txt
Código:
0
0 2
0 0 3
0 2 0 4
2 5 0 6 4
  #4 (permalink)  
Antiguo 07/03/2013, 15:56
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Leer matriz .txt i guardalra en lista de listas

Cita:
Iniciado por AlvaroG Ver Mensaje
Código Python:
Ver original
  1. for linea in archivo.readlines(): # lee todas las líneas del archivo, conserva saltos de línea
  2.     partes_linea = linea.split()
  3. ...


Saludos
Gracias tio te cojo esta parte del codigo que la veo mas entdible ahora he echo esto
Código:
def leerarchivo(nArchivo):
    archivo = open (nArchivo,'r')
    Ltotal = []
    
    for linea in archivo.readlines(): # lee todas las líneas del archivo, conserva saltos de línea
        partes_linea = linea.split()
        Ltotal.append(partes_linea)
        
    print Ltotal       
def main():
    leerarchivo('Matriu.txt')
   
    if __name__ == "__main__":
        main()
El problema es que se me guardan como caracteres rollo '0', '1' etc. Antes hacia una conversion con el append

Código:
 Ltotal.append(int(partes_linea))
Pero me da error, como puedo arreglarlo?
  #5 (permalink)  
Antiguo 08/03/2013, 08:02
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Leer matriz .txt i guardalra en lista de listas

No has entendido lo que te sugerí, estás forzando siempre a leer todo el archivo cuando podrías iterar sobre él línea por línea con el código de mi segundo ejemplo.

int(partes_linea) siempre te dará un error porque partes_linea es una lista. Para convertir los elementos de la lista a enteros, podés usar
Código Python:
Ver original
  1. Ltotal.append([ int(i) for i in partes_lista ])

o, como en el ejemplo de razpeitia:
Código Python:
Ver original
  1. Ltotal.append(map(int, partes_lista))
  #6 (permalink)  
Antiguo 12/03/2013, 08:05
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Leer matriz .txt i guardalra en lista de listas

Vale merci ahora si, otra consulta tengo que leer otro archivo el cual solo quiero convertir a entero algunas columnas.

El formato del fichero es:

1 Gare_VAISE D 6 5
2 Lyon A -1 3
...
...

Solo quiero converitr a entereo los numeros.

Un saludo
  #7 (permalink)  
Antiguo 12/03/2013, 08:18
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Leer matriz .txt i guardalra en lista de listas

Creo que lo más sencillo es que uses "int(valor)" para cada valor, pero controles si int() no puede convertirlo (si lanza una excepción por no ser numérico)

De otro modo, si sabes qué campos serán numéricos y qué campos serán cadenas, una sustitución simple puede ser (considerando que el primer campo sea cadena y los otros numéricos):

Código Python:
Ver original
  1. Ltotal.append([partes_lista[0]] + map(int, partes_lista[1:]))

Si tenés una situación más compleja, create una función que tome partes_lista y convierta según sea necesario, hacés que esa función devuelva una lista nueva de partes, y entonces podés hacer algo como

Código Python:
Ver original
  1. Ltotal.append(convertir_partes(partes_lista))


Saludos.
  #8 (permalink)  
Antiguo 12/03/2013, 08:48
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Leer matriz .txt i guardalra en lista de listas

Solucionado, el ficher que me habian pasado estava mal.

Saludos y gracias

Última edición por Macas; 12/03/2013 a las 09:08
  #9 (permalink)  
Antiguo 24/03/2016, 19:35
 
Fecha de Ingreso: marzo-2016
Mensajes: 1
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Leer matriz .txt i guardalra en lista de listas

Hola chicos! Fijense, tome su idea y sirve a la perfección, pero estoy intentando que solo coloque en la matriz aquellos valores que tengan en el txt un asterisco a su lado por ejemplo, me explico?

Etiquetas: lista, listas, matriz, 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 21:20.