lectura de elementos de un fichero

Arnau Sanchez pyarnau en gmail.com
Dom Oct 26 16:19:42 CET 2008


Ibrahim Peraza Kelly escribió:

> Estoy empezando a aprender python y leyendo un ejemplo me encuentro con
> estas líneas que soy incapaz de comprender, en concreto la tercera
> 
> file = open("test.txt", 'rt')
> content = file.readlines()
> tiles = [[x for x in row.split()] for row in content]
> 
> El fichero test es un fichero con elementos separados por espacios. Entiendo
> que abrimos el fichero en modo lectura, leemos el fichero entero y lo
> almacenamos en la variable content que es una lista de strings, y cada
> string tiene el contenido de cada línea del fichero test.txt. Luego ya en la
> tercera línea soy incapaz de entender qué se está haciendo, si alguién me lo
> puede explicar se lo agradecería enormemente

Lo que se hace en esa tercera línea es una comprensión de lista (dos, de hecho):

http://es.diveintopython.org/odbchelper_map.html

De todos modos, ese código no es del todo correcto: almacenar el contenido de 
todas las líneas para luego tratarlas no es muy eficiente, es preferible 
aprovechar que la iteración sobre objetos fichero devuelve su contenido línea a 
línea. Además, [x for x in row.split()] es redundante, ya que es equivalente a 
row.split(). Sólo si se tiene que hacer algo con "x" se justificaría esa 
comprensión de lista.

En fin, que esas 3 líneas se podrían reescribir en 1:

tiles = [row.split() for row in open("test.txt")]

o si prefieres la función map (menos idiomático):

tiles = map(str.split, open("test.txt"))

-- 
Web: http://tokland.freehostia.de
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es