我是一名新手,正在练习如何更好地从文件中读取数据。
我正试图从文件中提取温度数据,其中文件中数据元素之间的空格数量无关紧要。
所讨论的文件看起来像这样:
Year: 1975. Month: November.
10.2 3.2 4.6 12.7 8.9 9.1 10.11
9.4 2.8 10.9 10.7 17.3 2.2 9.6
11.5 6.0 7.4 6.5 10.3 4.5 3.2
4.1 6.7 8.5 6.2 9.9 5.6 3.1
2.3 1.1 14.1
我想将数据附加到一个嵌套的列表中,其中每一行都是列表中的列表,就像这样:
[[10.2, 3.2, 4.6, 12.7, 8.9, 9.1, 10.11], [9.4, 2.8, 10.9, 10.7, 17.3, 2.2, 9.6],...,[2.3, 1.1, 14.1]]
现在我知道解决方案可能涉及使用嵌套for循环,但我仍在逐渐适应它们。我已经尝试了一堆不同类型的嵌套for循环,但它们似乎都没有给我想要的结果。
我最接近的解决方案是用下面的代码:
list = []
with open("filename.txt", "r") as file:
file.readline()
for line in file:
line.strip().split("n")
list.append(line)
print(list)
输出如下内容:
这显然不是我想要的。
['10.2 3.2 4.6 12.7 8.9 9.1 10.11n', '9.4 2.8 10.9 10.7 17.3 2.2 9.6n', (..)', '2.3 1.1 14.1']
如果有人可以帮助我解决这个问题,并推进我在这个主题上的学习,我将非常感激。
正如Michael Butscher提到的,只使用split()
:
list = []
with open("filename.txt", "r") as file:
file.readline()
for line in file:
row = line.split()
# convert string list to float list
row = [float(value) for value in row]
list.append(row)
print(list)
输出[[10.2, 3.2, 4.6, 12.7, 8.9, 9.1, 10.11], [9.4, 2.8, 10.9, 10.7, 17.3, 2.2, 9.6], [11.5, 6.0, 7.4, 6.5, 10.3, 4.5, 3.2], [4.1, 6.7, 8.5, 6.2, 9.9, 5.6, 3.1], [2.3, 1.1, 14.1]]
尝试:
my_list = []
with open(r"filename.txt", "r") as file:
for line in file.readlines()[1:]: # skip first line
my_list.append([float(i) for i in line.strip().split()])
print(my_list)
[[10.2, 3.2, 4.6, 12.7, 8.9, 9.1, 10.11], [9.4, 2.8, 10.9, 10.7, 17.3, 2.2, 9.6], [11.5, 6.0, 7.4, 6.5, 10.3, 4.5, 3.2], [4.1, 6.7, 8.5, 6.2, 9.9, 5.6, 3.1], [2.3, 1.1, 14.1]]
strip
和split
都不会"就地"改变其参数。(字符串是不可变的,所以strip不能这样做。并且split
返回字符串列表,因此也不会这样做)。所以如果你给它们的结果赋值就没问题了。我们还将内容映射为浮点数因为它们是字符串
res = []
with open("filename.txt") as file:
# skip the very first line
file.readline()
# for each line...
for line in file:
# strip & split you did; also mapping to floats
sub_list = [*map(float, line.rstrip("n").split())]
# storing in
res.append(sub_list)
> res
[[10.2, 3.2, 4.6, 12.7, 8.9, 9.1, 10.11],
[9.4, 2.8, 10.9, 10.7, 17.3, 2.2, 9.6],
[11.5, 6.0, 7.4, 6.5, 10.3, 4.5, 3.2],
[4.1, 6.7, 8.5, 6.2, 9.9, 5.6, 3.1],
[2.3, 1.1, 14.1]]
注意:我使用rstrip("n")
来明确地右剥末尾的换行符。(我们也可以在那里做line[:-1]
。)还使用不带参数的split()
来分割任何空白。当您这样做时,它会尝试拆分换行符,但一行中不能有换行符(特别是在您剥离它之后)!
终于!使用list
作为变量名是不好的!它掩盖了Python的内置list
…所以我用res
来表示"result":)