Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read file into list and strip newlines

Tags:

python

list

strip

I'm having issues in reading a file into a list, When I do it only creates one item from the entire file rather than reading each element into its own field. I'm using \n as the thing to strip on, but I can't get it to work correctly.

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

Result:

['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 <module>
     print drugs.strip('\n')
AttributeError: 'list' object has no attribute 'strip'
like image 374
JohnF1NK Avatar asked Sep 28 '13 02:09

JohnF1NK


2 Answers

If you're okay with reading the entire file's contents into memory, you can also use str.splitlines()

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

splitlines() is similar to split('\n') but if your file ends with a newline, split('\n') will return an empty string at the very end, whereas splitlines() handles this case the way you want.

like image 72
Boris Avatar answered Oct 12 '22 13:10

Boris


file.read() reads entire file's contents, unless you specify max length. What you must be meaning is .readlines(). But you can go even more idiomatic with a list comprehension:

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

The with statement will take care of closing the file.

like image 25
9000 Avatar answered Oct 12 '22 14:10

9000