从具有无关紧要的空格的列表中读取数据
Reading data from list with inconsequential whitespacing
我是菜鸟,正在练习如何更好地从文件中读取数据等等。
我正在尝试从文件中提取温度数据,其中文件中数据元素之间的空格数无关紧要。
有问题的文件如下所示:
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 循环,但其中 none 似乎给了我想要的结果。
我最接近的解决方案是使用以下代码:
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.11\n', '9.4 2.8 10.9 10.7 17.3 2.2 9.6\n', (..)', '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]]
正如 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]]
strip
和 split
都不会“就地”改变其参数。 (字符串是不可变的,所以 strip 无论如何都做不到。split
returns 一个字符串列表,所以也不会做)。因此,如果您分配给他们的结果就可以了。我们还将内容映射到浮点数,因为它们以字符串形式出现
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()
witohut 参数来分割任何空白。正如您所做的那样,它会尝试拆分换行符,但一行中不能有换行符(尤其是在您删除它之后)!
终于!使用 list
作为变量名是不好的!它隐藏了 Python 的内置 list
... 所以我使用 res
作为“结果”:)
我是菜鸟,正在练习如何更好地从文件中读取数据等等。
我正在尝试从文件中提取温度数据,其中文件中数据元素之间的空格数无关紧要。
有问题的文件如下所示:
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 循环,但其中 none 似乎给了我想要的结果。
我最接近的解决方案是使用以下代码:
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.11\n', '9.4 2.8 10.9 10.7 17.3 2.2 9.6\n', (..)', '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]]
正如 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]]
strip
和 split
都不会“就地”改变其参数。 (字符串是不可变的,所以 strip 无论如何都做不到。split
returns 一个字符串列表,所以也不会做)。因此,如果您分配给他们的结果就可以了。我们还将内容映射到浮点数,因为它们以字符串形式出现
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()
witohut 参数来分割任何空白。正如您所做的那样,它会尝试拆分换行符,但一行中不能有换行符(尤其是在您删除它之后)!
终于!使用 list
作为变量名是不好的!它隐藏了 Python 的内置 list
... 所以我使用 res
作为“结果”:)