我在使用Python将列表从字符串转换为数字时遇到问题。
我读取了一个文件,需要从中提取坐标数据。
文件包含以下坐标:
(-5 -0.005 -5)
(-4.9 -0.005 -5)
(-4.8 -0.005 -5)
(-4.7 -0.005 -5)
(-4.6 -0.005 -5)
(-4.5 -0.005 -5)
(-4.4 -0.005 -5)
(-4.3 -0.005 -5)
(-4.2 -0.005 -5)
(-4.1 -0.005 -5)
首先,我读取文件并使用以下代码获取坐标:
f = open("text.txt", 'r')
if f.mode == 'r':
contents = f.readlines()
在那之后,如果我调用contents [0],它将显示为(-5 -0.005 -5)作为字符串。
我尝试处理内容。
coor = contents[0] # picking 1 list of coordinates
allNumber = coor[1:-2] # delete the open and close brackets
print(list(map(int, allNumber))) # hopefully get the integers mapped into x, y, and z coordinates :(
我得到了这样的结果:
ValueError: invalid literal for int() with base 10: '-'
我想要类似[-5, -0.005, -5]
的东西,以便提取其中的每个数字。
答案 0 :(得分:0)
您可以这样做:
with open('test.txt') as f:
lines = (line.strip()[1:-1] for line in f)
values = (tuple(map(float, line.split())) for line in lines)
data = list(values)
print(data)
# [(-5.0, -0.005, -5.0), (-4.9, -0.005, -5.0), (-4.8, -0.005, -5.0),
# (-4.7, -0.005, -5.0), (-4.6, -0.005, -5.0), (-4.5, -0.005, -5.0),
# (-4.4, -0.005, -5.0), (-4.3, -0.005, -5.0), (-4.2, -0.005, -5.0), (-4.1, -0.005, -5.0)]
使用with open()...
确保无论发生什么情况,文件都会关闭。
lines
是一个生成器,它在文件的各行上进行迭代,并在切掉第一个和最后一个字符(括号)之后产生从换行符剥离的每一行。
values
为每条清除的线生成一个元组,方法是将其拆分并将值转换为浮点数,因为它们并非全都是整数。
然后我们从中列出一个清单。
答案 1 :(得分:0)
data = []
with open('test.txt') as f: # Better way to work with files
lines = f.readlines()
for line in lines:
data.append(line.strip()[1:-1].split(", "))
该数据之后将是列表列表,因此您可以使用data[index_of_the_line][index of the elemnt]