我正在尝试将一些pointcloud坐标导入到python中,这些值在这种格式的文本文件中
0.0054216 0.11349 0.040749
-0.0017447 0.11425 0.041273
-0.010661 0.11338 0.040916
0.026422 0.11499 0.032623
等等。
香港专业教育学院尝试过2种方法
def getValue(filename):
try:
file = open(filename,'r')
except: IOError:
print ('problem with file'), filename
value = []
for line in file:
value.append(float(line))
return value
我在空闲时调用了上面的代码,但是有一个错误表明该字符串无法转换为float。
import numpy as np
import matplotlib.pyplot as plt
data = np.genformtxt('co.txt', delimiter=',')
在这种方法中,当我在空闲状态下调用数据时,它表示没有定义数据。
以下是错误消息
>>> data[0:4]
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
data[0:4]
NameError: name 'data' is not defined
答案 0 :(得分:0)
根据您提供的数据,我会说您正在尝试使用:
np.loadtxt(<yourtxt.txt>, delimiter=" ")
在这种情况下,您的分隔符应为空白区域,如数据中所示。这对我很有用。
您的问题是您使用逗号作为分隔符。
答案 1 :(得分:0)
float()
转换一个数字字符串,而不是几个(读取其文档)
In [32]: line = '0.0054216 0.11349 0.040749 '
In [33]: float(line)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-33-0f93140abeab> in <module>()
----> 1 float(line)
ValueError: could not convert string to float: '0.0054216 0.11349 0.040749 '
请注意,错误告诉我们哪个字符串给它带来了问题。
如果我们将线分成子串并单独转换它们,它就有效。
In [34]: [float(x) for x in line.split()]
Out[34]: [0.0054216, 0.11349, 0.040749]
同样,genfromtxt
需要将行拆分为适当的子串。您的文件中没有,
,所以很明显错误的分隔符。默认分隔符是空格,在这种情况下可以正常工作。
In [35]: data = np.genfromtxt([line])
In [36]: data
Out[36]: array([0.0054216, 0.11349 , 0.040749 ])
使用错误的分隔符,它会尝试将整行转换为浮点数。它不能(与上面相同的原因),因此它使用np.nan
代替。
In [37]: data = np.genfromtxt([line], delimiter=',')
In [38]: data
Out[38]: array(nan)