2014-03-12 33 views
1

我有一個文件,它用x,y,x的值分隔空間。我需要可視化數據,所以我想我需要這樣讀取文件到3個單獨的數組(X,Y,Z),然後繪製它們。我如何將文件讀取到3個單獨的數組中,我到目前爲止已經刪除了每行結尾處的空白元素。將文件元素讀入3個不同的數組

def fread(f=None): 
    """Reads in test and training CSVs.""" 
    X = [] 
    Y = [] 
    Z = [] 

    if (f==None): 
     print("No file given to read, exiting...") 
     sys.exit(1) 

    read = csv.reader(open(f,'r'),delimiter = ' ') 
    for line in read: 
     line = line[:-1] 

我嘗試添加類似:

for x,y,z in line: 
    X.append(x) 
    Y.append(y) 
    Z.append(z) 

但我得到這樣一個錯誤「ValueError異常:值過多解壓」

我已經做了很多的谷歌搜索,但似乎沒有任何地址必須在文件中讀入每個元素的單獨數組。

我要補充我的數據不會很好地分成行/列,它只是看起來像這樣 「107745590026 2 0.02934046648 0.01023879368 3.331810236 2 0.02727724425 0.07867902517 3.319272757 2 0.01784882881」 ......

謝謝!

+0

你行包含三個以上的項目,所以這樣的事情會失敗:'A,b,C = 1,2 ,3,4]' –

回答

1

編輯:如果你的數據是不實際分爲3元系(是值,而不是一個長空格分隔的列表),你可以使用步幅Python列表切片,以使它更容易些:

X = read[::3] 
Y = read[1::3] 
Z = read[2::3] 

此錯誤可能會發生,因爲一些read的線路包含三個以上的空間分隔值。從你的問題來看,你不清楚在這些情況下你想做什麼。如果你正在使用python 3,你可以把一條線的第一個元素爲X,第二次進入Y,並且該行的其餘所有進入Z下列要求:

for x, y, *z in line: 
    X.append(x) 
    Y.append(y) 
    for elem in z: 
     Z.append(elem) 

如果你不使用python 3,你可以在一個稍微詳細的方式執行相同的基本邏輯:

for i, elem in line: 
    if i == 0: 
     X.append(elem) 
    elif i == 1: 
     Y.append(elem) 
    else: 
     Z.append(elem) 
+0

正是我需要的,謝謝。 – Azureaus