【问题标题】:Importing large set of numbers from a text file into python program in matrix form以矩阵形式将大量数字从文本文件导入python程序
【发布时间】:2018-07-10 11:04:22
【问题描述】:

我正在尝试将一些点云坐标导入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

等等。
我试过用两种方法来做

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  

我在idle中调用了上面的代码,但是有一个错误说字符串不能转换为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

【问题讨论】:

  • 能否请您格式化您的问题和代码。格式化代码时不要使用数字,因为这会搞砸。还请确保所有代码缩进与您机器上的完全一致
  • 当然,很抱歉给我带来了麻烦
  • 如果您收到“数据未定义”错误,那么这与读取文件无关。您需要创建一个Minimal, Complete, and Verifiable Example
  • 可以添加你正在使用的脚本吗?
  • 不好意思问这个问题,但是在执行data[0:4]之前,你有没有执行data = np.genformtxt('co.txt', delimiter=',')。因为看起来你的变量还没有创建。

标签: python arrays numpy matrix point-clouds


【解决方案1】:

根据您提供的数据,我想说您正在尝试使用:

np.loadtxt(<yourtxt.txt>, delimiter=" ")

在这种情况下,您的分隔符应该是空格,这可以在您的数据中看到。这对我来说非常有效。

您的问题是您使用逗号作为分隔符。

【讨论】:

  • 我也尝试过使用空间,但错误似乎不是因为这个,错误表示名称数据未定义
  • 如果我将分隔符作为空格,使用相同的方法 (genfromtxt) 对我有用...
  • 很抱歉,您提供的东西不能帮助您更多,它对我的​​空间有用...祝您好运
  • @SarveshKumarMalladi 该错误与读取数据无关。您需要提供MCVE
  • 对不起,我正在尝试添加错误消息我仍然对格式不满意,请耐心等待
【解决方案2】:

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)

【讨论】:

  • 我试过你的建议,但它只是告诉我文件有问题
  • 我要为您的方法导入整个文件吗?
猜你喜欢
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多