我目前正在尝试将带有数字的文本文件放入列表中 文本文件是
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()
答案 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
使用IntEnum
或namedtuple
可能会更好。同样,它实际上取决于您在导入数据后如何使用数据。