Foros del Web » Programando para Internet » Python »

Duda de novato

Estas en el tema de Duda de novato en el foro de Python en Foros del Web. Hola: Tengo que hacer una lista o un array a partir de un fichero de texto para despues hacer operaciones con esos numeros. Fichero de ...
  #1 (permalink)  
Antiguo 03/01/2012, 10:24
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Duda de novato

Hola:
Tengo que hacer una lista o un array a partir de un fichero de texto para despues hacer operaciones con esos numeros.
Fichero de texto:
1 2 3
4 8 4
1 2 4
6 5 9

he intentado con esta opción, pero no me permite hacer operaciones:

fh = open( "archivo.txt" );
x = []
for line in fh.readlines():
y = [value for value in line.split()]
x.append( y )

fh.close()

print x

creo que debo pasarlos a enteros, pero no se como.

un saludo y muchas gracias

Agradecería tu ayuda, un saludo.
  #2 (permalink)  
Antiguo 03/01/2012, 10:36
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Duda de novato

A ver así:
Código Python:
Ver original
  1. x = [[int(n) for n in line.split(' ')] for line in fh.readlines()]
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 03/01/2012, 10:48
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Primero gracias por tu rapida respuesta.
He provado pero me da error

EXCEPTIONS.VALUE ERROR: invalid literal for int() with base 10:
  #4 (permalink)  
Antiguo 03/01/2012, 12:07
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Duda de novato

Intenta con esto:

Código Python:
Ver original
  1. fh=open("archivo.txt");
  2.     x=[]
  3.     for line in fh.read():
  4.         y=[v for v in line.split()]
  5.         if y!=[ ]:
  6.             x.append(int(y[0]));
  7.     fh.close()
  8.  
  9.     print x
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #5 (permalink)  
Antiguo 03/01/2012, 12:19
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato



Muchisimas gracias, tiene muy buena pinta
  #6 (permalink)  
Antiguo 03/01/2012, 12:36
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Me vais a mandar a ...

...Pero ,como sería en matriz?

Gracias crack
  #7 (permalink)  
Antiguo 03/01/2012, 13:10
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: Duda de novato

Código Python:
Ver original
  1. data = """1 2 3
  2. 4 8 4
  3. 1 2 4
  4. 6 5 9"""
  5.  
  6. [[int(num) for num in line.strip().split(' ')] for line in data.split('\n')]
Suponiendo que data sea el contenido de tu archivo esto debe de hacer el trabajo.
  #8 (permalink)  
Antiguo 03/01/2012, 14:36
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Cita:
Iniciado por CapacProg Ver Mensaje
Intenta con esto:

Código Python:
Ver original
  1. fh=open("archivo.txt");
  2.     x=[]
  3.     for line in fh.read():
  4.         y=[v for v in line.split()]
  5.         if y!=[ ]:
  6.             x.append(int(y[0]));
  7.     fh.close()
  8.  
  9.     print x
El problema que tengo ahora es que no me deja hacer operaciones matematicas, hago algo mal?
  #9 (permalink)  
Antiguo 04/01/2012, 05:51
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Duda de novato

Que tipo de operaciones haces y donde?
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #10 (permalink)  
Antiguo 04/01/2012, 11:37
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Sorry, me funciona perfectamente y me deja todo tipo de operaciones, lo que no logro es hacer la matriz
  #11 (permalink)  
Antiguo 04/01/2012, 11:58
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Duda de novato

Y probaste el código que puso @razpeitia ?

Saludos
__________________
Grupo Telegram Docker en Español
  #12 (permalink)  
Antiguo 04/01/2012, 12:07
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

si, pero me da error
  #13 (permalink)  
Antiguo 04/01/2012, 12:12
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Duda de novato

Y que error, si no es molestia?

Saludos
__________________
Grupo Telegram Docker en Español
  #14 (permalink)  
Antiguo 04/01/2012, 12:28
 
Fecha de Ingreso: enero-2012
Mensajes: 8
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Cita:
Iniciado por Carlangueitor Ver Mensaje
Y que error, si no es molestia?

Saludos

encima de que me ayudais como para ser molestia.

Ayer me dio error (no me acuerdo cual) pero hoy no me dio nada.

El ejercicio lo tengo resuelto, pero creo que con una matriz seria mas facil, porque he echo una matriz a mano, y es facil trabajar con ella, pero no se hacerla a partir de un txt.

Un saludo

edito, si me da algo, lo que yo busco es esto a partir de un texto


M = [ [1, 2, 3], [4, 8,4], [1, 2, -4], [6, 5, 9] ]
print M

[[1, 2, 3], [4, 8, 4], [1, 2, -4], [6, 5, 9]]

Última edición por gusienz; 04/01/2012 a las 12:34
  #15 (permalink)  
Antiguo 04/01/2012, 12:43
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Duda de novato

Pues solo tienes que volcar el contenido de un texto en una variable y lo puedes hacer igualito.

Saludos
__________________
Grupo Telegram Docker en Español
  #16 (permalink)  
Antiguo 04/01/2012, 17:24
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Hola a todos.
Antes de nada ,vengo de aquí:
http://www.forosdelweb.com/f130/crear-matriz-leer-fichero-968004/


He estado leyendo el post y tengo algunas dudas (inicialmente tenía el mismo problema)

Mi objetivo es ,dado un fichero leer a partir de él los datos y almacenarlos en una matriz

1 2 12
8 4 10
9 1 0

He estado probando lo que habéis puesto (el codigo puesto por CapacProg) y funciona ,pero los almacena en una lista nomral y corriente. Yo quería dejarlos en una matriz con sus filas y sus columnas.

He visto también otro problema , y es que para números de dos o más dígitos los separa.

Por ejemplo en el ejemplo que he puesto el 12 lo descomopone como 1 y 2 lo mismo que el 10...y no quería que eso sucediera.


Luego por otro lado el código puesto por razpeitia para la matriz no lo entiendo ,la linea que puso él donde va? Es en conjunción con el codigo aportado por CapacProg?




Muchas gracias a todos ,a ver si me podéis ayudar porque es muy urgente y es lo único que no sé hacer.
  #17 (permalink)  
Antiguo 04/01/2012, 17:44
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: Duda de novato

Si van empezando les recomiendo leer python para todos si van empezando solo lean los primeros capítulos.

Ahora, como había posteado arriba en la solución que les doy funciona de maravilla.

De todas formas dejo aquí una solución que lee desde un archivo.

Código Python:
Ver original
  1. f = open("archivo.txt")
  2. data = f.read().strip()
  3. f.close()
  4.  
  5. M = [[int(num) for num in line.strip().split()] for line in data.split('\n')]
  6. print M
  #18 (permalink)  
Antiguo 05/01/2012, 02:18
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda de novato

Guau tio ,funciona a las mil maravillas. Muchísimas gracias de verdad.

Podrias explicarme un poco que hacen verdaderamente estas lineas?
Código:
M = [[int(num) for num in line.strip().split()] for line in data.split('\n')]

y

Código:
data = f.read().strip()

PD:Vaya ,lo he estado mirando ahora más a fondo y hay un último problema. Los almacena por filas ,y debería ser por columnas...

Por ejemplo ,para
1 2 10
25 12 5
3 4 0

lo almacena:
[[1, 2, 10], [25, 12, 5], [3, 4, 0]]

Cuando debería almacenarlso así:
[[1,25,3],[2,12,4],[10,5,0]]

Hay alguna forma de la manera que has dicho tú que lo haga así? Porque almacenarlo por filas yo ya tenía la solución.





PD2:Ahora que lo miro ,y no sé si me estoy liando... tu forma de almacenar la matriz esla correcta no?
Porque por ejemploen tu caso el 2 sería fila 0 columna 1 y el 10 sería fila 0 columna 2.
En mi caso sería :el 2 sería fila 1 columna 0 y el 10 sería fila 2 columna 2.

Última edición por eldruida9; 05/01/2012 a las 02:25
  #19 (permalink)  
Antiguo 05/01/2012, 06:25
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Duda de novato

Para alternar entre filas y columnas usa zip.
Código Python:
Ver original
  1. zip(M)
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
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 15:42.