我正在使用以下代码读取文本文件:
import numpy as np
my_data = np.genfromtxt(resultsDirectory+'/Points.txt', delimiter=' ')
PointX = my_data[:,5]
PointY = my_data[:,11]
我的输入文件通常是这样的 -
ParamA : 0 ParamB : 7 ParamC : 0 ParamD : 1 Result : FAIL Time : 0 Epsilon : 0.5
ParamA : 0 ParamB : 11 ParamC : 0 ParamD : 1 Result : FAIL Time : 2 Epsilon : 0.5
ParamA : 0 ParamB : 7 ParamC : 0 ParamD : 3 Result : FAIL Time : 2 Epsilon : 0.25
ParamA : 0 ParamB : 13 ParamC : 0 ParamD : 1 Result : FAIL Time : 7 Epsilon : 0.25
ParamA : 0 ParamB : 7 ParamC : 0 ParamD : 4 Result : FAIL Time : 8 Epsilon : 0.125
ParamA : 0 ParamB : 8 ParamC : 0 ParamD : 2 Result : FAIL Time : 1 Epsilon : 0.125
ParamA : 0 ParamB : 8 ParamC : 0 ParamD : 3 Result : FAIL Time : 3 Epsilon : 0.125
ParamA : 0 ParamB : 8 ParamC : 0 ParamD : 4 Result : FAIL Time : 6 Epsilon : 0.125
ParamA : 0 ParamB : 9 ParamC : 0 ParamD : 2 Result : FAIL Time : 6 Epsilon : 0.125
ParamA : 0 ParamB : 10 ParamC : 0 ParamD : 2 Result : FAIL Time : 5 Epsilon : 0.125
ParamA : 0 ParamB : 14 ParamC : 0 ParamD : 1 Result : FAIL Time : 6 Epsilon : 0.125
当我从中提取 PointX 时,我得到
PointX = [7 11 7 13 7 8 8 8 9 10 14]
PointY = [1 1 3 1 4 2 3 4 2 2 1]
现在,有时我的文本文件只包含一行,甚至是空的。
例如,如果文本文件只有一行,则 my_data 数组是这样的 -
[ nan nan 0. nan nan 7. nan nan 0. nan nan 1.
nan nan nan nan nan 0. nan nan 0.5]
在本例中,my_data.shape
返回 (21,)
。
但是,读取数组 PointX
或 PointY
会给我一个错误:IndexError:无效索引
。我想要 PointX=[7]
和 PointY=[1]
。或者,如果文本文件为空,则应为 PointX=[]
和 PointY=[]
。
我到底应该如何解决这个问题?另外,我需要我的 PointX
和 PointY
是一个数组,以免破坏依赖它的代码。
谢谢。
最佳答案
不幸的是,如果给定的文件只有一行,则 genfromtxt
返回一个一维数组,如果给定多于一行,则返回一个二维数组。您可以通过 reshape 来处理差异:
import numpy as np
my_data = np.genfromtxt('data', delimiter=' ')
if my_data.ndim == 1:
my_data = my_data.reshape(1, -1)
PointX = my_data[:,5]
PointY = my_data[:,11]
print(PointX)
print(PointY)
产量
[ 7.]
[ 1.]
关于当空或单行时,Python读取numpy数组中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12843610/