2012-10-11 27 views
1

我從文本文件閱讀與下面的代碼的文本文件:Python的閱讀numpy的陣列時,空或單行

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,)

但是,讀數組PointXPointY給我一個錯誤,因爲IndexError: invalid index。我想要PointX=[7]PointY=[1]。或者如果文本文件是空的,它應該是PointX=[]PointY=[]

我究竟應該如何解決這個問題?另外我需要我的PointXPointY是一個數組,以便不破壞依賴於它的代碼。

謝謝。

+0

這不是我清楚你想在'PointX'哪些項目和'PointY'。你是否想要所有到第六個元素的東西都在'PointX'中,並且所有東西都到達'PointY'中的第12個元素? –

+0

你會提供一個CSV文件中的數據的例子嗎? –

+0

@Andy我想分別讀取數組PointX和PointY中的值7和1。我已經相應地更新了問題描述。 – Raj

回答

3

不幸的是,genfromtxt返回一維數組,如果只給出一行文件,並返回一個2D數組,如果給出多行。你可以通過變形處理的差異:

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.] 
+0

完美!正是我需要的! :) – Raj

2

爲了處理空文件:

import numpy as np 
try: 
    my_data = np.genfromtxt('data_file', delimiter=' ') 
    if my_data.ndim == 1: 
     my_data = my_data.reshape(1, -1) 
    PointX = my_data[:,5] 
    PointY = my_data[:,11] 
except IOError: # File is empty 
    PointX = [] 
    PointY = [] 

print(PointX) 
print(PointY)