2008-11-29 11 views
26

Estoy tratando de abrir un archivo y crear una lista con cada línea leída del archivo.Crear una lista que contenga cada línea de un archivo

i=0 
    List=[""] 
    for Line in inFile: 
     List[i]=Line.split(",") 
     i+=1 
    print List 

Pero este código de ejemplo me da un error debido a la i+=1 diciendo que index is out of range. ¿Cuál es mi problema aquí? ¿Cómo puedo escribir el código para incrementar mi lista con cada línea nueva en InFile?

Respuesta

58

Es mucho más fácil que eso:

List = open("filename.txt").readlines() 

Esto devuelve una lista de cada línea en el archivo.

+0

wooow Simplemente perfecto! Funcionó. Por cierto, imagine que no era un archivo ... Pero quiero crear una lista dinámica ... ¿Cómo puedo agregar un elemento? como si fuera una lista de arreglos? ty tanto – UcanDoIt

+0

El método de apéndice hará el truco. Por ejemplo: xs.append (línea) –

+2

¿qué hay de cerrar el archivo? – matlabit

-5

No estoy seguro acerca de Python, pero la mayoría de los lenguajes tienen la función de inserción/inserción para las matrices.

8
my_list = [line.split(',') for line in open("filename.txt")] 
+2

Me temo que saltar a una lista de comprensión para alguien que todavía está tratando de entender la pitón básica podría ser un paso muy grande. :) – Dustin

+0

Supongo que tienes razón ... – orip

+0

Dustin tiene razón, sin embargo orip ofreció la respuesta más correcta a la pregunta. – tzot

1

Un archivo es casi una lista de líneas. Puede usarlo trivialmente en un para el bucle.

myFile= open("SomeFile.txt", "r") 
for x in myFile: 
    print x 
myFile.close() 

O, si desea una lista real de líneas, basta con crear una lista del archivo.

myFile= open("SomeFile.txt", "r") 
myLines = list(myFile) 
myFile.close() 
print len(myLines), myLines 

No se puede hacer someList[i] para poner un nuevo elemento al final de una lista. Debe hacer someList.append(i).

Además, nunca inicia un nombre de variable simple con una letra mayúscula. List confunde a las personas que conocen Python.

Además, nunca utilizan un nombre incorporado como variable. list es un tipo de datos existente, y usarlo como una variable confunde a las personas que conocen Python.

+0

¿Cómo puedo aprender sobre los estándares de codificación Python? Gracias, no sabía que usa nombres vaiverables en minúsculas ... ¿alguna razón especial para eso? Ty – UcanDoIt

+0

Mientras estás en convenciones, PEP8 también tiene algo que decir sobre espacios dentro de paréntesis. :) – Dustin

+0

Vea http://www.python.org/dev/peps/pep-0008/, también vea http://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python -for-variable-and-function-names –

1

f.readlines() devuelve una lista que contiene cada línea como un elemento de la lista

si quieres eachline que ser dividido (""), puede utilizar las listas por comprensión

[ list.split(",") for line in file ] 
7

Por favor, lea PEP8. Te estás balanceando bastante lejos de las convenciones de Python.

Si desea una lista de listas de cada línea dividido por una coma, lo haría esto:

l = [] 
for line in in_file: 
    l.append(line.split(',')) 

que obtendrá un salto de línea en cada registro. Si no desea que:

l = [] 
for line in in_file: 
    l.append(line.rstrip().split(',')) 
+0

muchas gracias. muy útil... – UcanDoIt

22

lo hice de esta manera

lines_list = open('file.txt').read().splitlines() 

Cada línea viene con su final de caracteres de línea (\ n \ r); de esta manera los personajes son eliminados.

0

Asumiendo que también quieren quitar espacio en blanco al principio y al final de cada línea, puede asignar la función de franja de cadena a la lista devuelta por readlines:

map(str.strip, open('filename').readlines()) 
Cuestiones relacionadas