从带有无关空格的列表中读取数据



我是一名新手,正在练习如何更好地从文件中读取数据。

我正试图从文件中提取温度数据,其中文件中数据元素之间的空格数量无关紧要。

所讨论的文件看起来像这样:

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]]

stripsplit都不会"就地"改变其参数。(字符串是不可变的,所以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":)

最新更新