spuriousarbiter
spuriousarbiter

Reputation: 13

How to turn a file into a list

I am currently trying to make a text file with numbers into a list the text file is

1.89
1.99
2.14 
2.51  
5.03  
3.81  
1.97 
2.31  
2.91  
3.97 
2.68 
2.44

Right now I only know how to read the file. How can i make this into a list? afterwards how can I assign the list to another list? for example

jan = 1.89
feb = 1.99 

etc

Code from comments:

inFile = open('program9.txt', 'r') 
lineRead = inFile.readline() 
while lineRead != '': 
    words = lineRead.split() 
    annualRainfall = float(words[0]) 
    print(format(annualRainfall, '.2f')) 
    lineRead = inFile.readline() 
inFile.close()

Upvotes: 1

Views: 114

Answers (2)

abarnert
abarnert

Reputation: 366003

A file is already an iterable of lines, so you don't have to do anything to make it into an iterable of lines.

If you want to make it specifically into a list of lines, you can do the same thing as with any other iterable: call list on it:

with open(filename) as f:
    lines = list(f)

But if you want to convert this into a list of floats, it doesn't matter what kind of iterable you start with, so you might as well just use the file as-is:

with open(filename) as f:
    floats = [float(line) for line in f]

(Note that float ignores trailing whitespace, so it doesn't matter whether you use a method that strips off the newlines or leaves them in place.)


From a comment:

now i just need to find out how to assign the list to another list like jan = 1.89, feb = 1.99 and so on

If you know you have exactly 12 values (and it will be an error if you don't), you can write whichever of these looks nicer to you:

jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec = (float(line) for line in f)
jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec = map(float, f)

However, it's often a bad idea to have 12 separate variables like this. Without knowing how you're planning to use them, it's hard to say for sure (see Keep data out of your variable names for some relevant background on making the decision yourself), but it might be better to have, say, a single dictionary, using the month names as keys:

floats = dict(zip('jan feb mar apr may jun jul aug sep oct nov dec'.split(),
                  map(float, f))

Or to just leave the values in a list, and use the month names as just symbolic names for indices into that list:

>>> jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec = range(12)
>>> print(floats[mar])
2.14

That might be even nicer with an IntEnum, or maybe a namedtuple. Again, it really depends on how you plan to use the data after importing them.

Upvotes: 1

DevLounge
DevLounge

Reputation: 8447

months = ('jan', 'feb', ...)

with open('filename', 'rb') as f:
  my_list = [float(x) for x in f]

res = dict(zip(months, my_list))

This will however work ONLY if there are the same number of lines than months!

Upvotes: 2

Related Questions