Question

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'
Was it helpful?

Solution

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.

OTHER TIPS

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.

This incorporates the strip directly into the for statement.

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

Or, if you know you don't need any space before or after text on a line, you can use this.

import string

with open('drugs', 'r') as f:
  for line in map(string.strip, f):
    print line
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top