2015-07-01 37 views
1

出於某種原因,我正在嘗試當我刪除了x.append和y.append線,只是把一個print語句運行下面的代碼指數誤差超出範圍蟒蛇的

#!/usr/bin/python 
import matplotlib.pyplot as plt 
x = [] 
y = [] 
readFile = open('Out_0_0.txt','r') 
sepFile = readFile.read().split('\n') 
readFile.close() 
for plotPair in sepFile: 
    xandy = plotPair.split() 
    x.append(int(xandy[0])) 
    y.append(int(xandy[1])) 
print x 
print y 

當這個錯誤打印出xandy中的內容,它會打印出數組中的每對值。該文本文件有這個

1 2 
3 4 
5 6 
7 8 

所有我希望它做的是存儲在X數組中的第一列和Y數組

+0

你爲什麼要將新閱讀分爲新行? '.read'會自動讀取一行中的一行。你可能是想要做'.readlines'? –

+1

你有什麼錯誤?當我運行代碼時,我得到'x = [1,3,5,7]'和'y = [2,4,6,8]' – Andy

+0

我猜測(不確定)你是否有空行在文件的底部。 – NightShadeQueen

回答

4

問題是你如何在閱讀中第二列文件。

這將工作。

x = [] 
y = [] 
with open('test.txt','r') as data_file: 
    for plot_pair in data_file: 
     xandy = plot_pair.split() 
     x.append(int(xandy[0])) 
     y.append(int(xandy[1])) 
print(x) 
print(y) 
3

在像Notepad ++這樣的編輯器中打開文件,並確保文件的開頭或結尾沒有多餘的行。

1

東西快...應該工作(不完全測試:P)

x = [] 
y = [] 
with open(inputFile, 'r') as f: 
    for line in f: 
     nextX, nextY = map(int, line.split(' ')) 
     x.append(nextX) 
     y.append(nextY) 

另一種快速的想法:確保txt文件具有結尾沒有空行。也許還要添加一個if line:檢查。

3

您可以更有效地(安全地)閱讀此內容。我做的第一個更改是在文件中讀取時使用with。這會在您完成後自動處理關閉文件。

接下來,我刪除了split('\n'),因爲它不是必需的。相反,我們將逐行循環遍歷文件,並將其分割爲空格。由於這是一個兩列的文件,我們會做這一行:

fx,fy = line.split() 

我堅持在一個try /除外情況下在該文件末尾的空行。這將產生一個ValueError和假設是,這是文件的結尾。

然後我們將行的列添加到最終數組中。

x = [] 
y = [] 
with open('test.txt') as f: 
    for line in f: 
     try: 
      fx,fy = line.split() 
     except ValueError: 
      break  
     x.append(int(fx)) 
     y.append(int(fy)) 

print x 
print y 

此打印出:

[1, 3, 5, 7] 
[2, 4, 6, 8] 

最後,我已經去除了matplotlib進口。這個例子並不是必需的。