以矩阵形式将大量数字从文本文件导入到python程序中

时间:2018-01-31 10:55:37

标签: python arrays numpy matrix point-clouds

我正在尝试将一些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

2 个答案:

答案 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)