Leer el archivo en la lista y quitar las nuevas líneas

Tengo problemas para leer un archivo en una lista. Cuando lo hago, solo crea un elemento de todo el archivo en lugar de leer cada elemento en su propio campo. Estoy usando \n como la cosa para desnudarme, pero no puedo hacer que funcione correctamente.

 temp = open('drugs') drugs = [temp.read().strip("\n")] temp.close 

Resultado:

 ['40 Stimpak\n53 Mentats\n87 Buffout\n109 Rad-X\n125 Booze\n260 Jet Antidote\n311 Roentgen Rum\n424 Monument Chunk\n480 Bonus +1 Agility\n525 Hypo \n48 RadAway\n71 Fruit\n103 Iguana-on-a-stick\n110 Psycho\n144 Super Stimpak\n273 Healing Powder\n334 Poison\n469 Rot Gut\n481 Bonus +1 Intelligence \n49 Antidote\n81 Iguana-on-a-stick\n106 Nuka-Cola\n124 Beer\n259 Jet\n310 Gamma Gulp Beer\n378 Cookie\n473 Mutated Toe\n482 Bonus +1 Strength '] drugs.strip('\n') Traceback (most recent call last): File "seek", line 18, in  print drugs.strip('\n') AttributeError: 'list' object has no attribute 'strip' 

file.read() lee el contenido completo del archivo, a menos que especifique la longitud máxima. Lo que debes significar es .readlines() . Pero puedes ir aún más idiomático con una lista de comprensión:

 with open('drugs') as temp_file: drugs = [line.rstrip('\n') for line in temp_file] 

La sentencia with se encargará de cerrar el archivo.

Si está de acuerdo con leer todo el contenido del archivo en la memoria, también puede usar str.splitlines()

 with open('your_file.txt') as f: lines = f.read().splitlines() 

splitlines() es similar a split('\n') pero si su archivo termina con una nueva línea, split('\n') devolverá una cadena vacía al final, mientras que splitlines() maneja este caso de la forma que desee .

Esto incorpora la tira directamente en la statement for .

 with open('drugs', 'r') as f: for line in map(lambda line: line.rstrip('\n'), f): print line 

O, si sabe que no necesita ningún espacio antes o después del texto en una línea, puede usar esto.

 import string with open('drugs', 'r') as f: for line in map(string.strip, f): print line