如何将文件转换为列表

时间:2014-11-18 19:19:54

标签: python

我目前正在尝试将带有数字的文本文件放入列表中 文本文件是

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

现在我只知道如何阅读文件。我如何将其列入清单? 之后如何将列表分配到另一个列表? 例如

jan = 1.89
feb = 1.99 

评论代码:

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()

2 个答案:

答案 0 :(得分:2)

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

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

res = dict(zip(months, my_list))

但是,如果行数与月数相同,则只会有效!

答案 1 :(得分:1)

文件已经是一个可迭代的行,因此您不必执行任何来使其成为可迭代的行。

如果你想将它专门用于行的列表,你可以做任何其他可迭代的事情:在它上面调用list

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

但是如果你想将它转换成浮点数列表,那么你开始使用哪种迭代并不重要,所以你也可以按原样使用该文件:

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

(请注意,float会忽略尾随空格,因此无论您是使用剥离换行符还是将其留在原位的方法都无关紧。)


来自评论:

  

现在我只需要找出如何将列表分配到另一个列表,如jan = 1.89,feb = 1.99等等

如果你知道你有12个值(如果你没有这个将是一个错误),你可以写下这些看起来更好的一个:

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)

然而,拥有12个这样的独立变量通常是一个坏主意。在不知道你打算如何使用它们的情况下,很难肯定地说(请参阅Keep data out of your variable names了解自己做出决定的相关背景),但是使用单个字典可能会更好月份命名为键:

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

或者只是将值保留在列表中,并将月份名称用作该列表中索引的符号名称:

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

使用IntEnumnamedtuple可能会更好。同样,它实际上取决于您在导入数据后如何使用数据。