2014-07-04 84 views
0

我對python很陌生,想要處理一個有6列和多行的數據文件。從文本文件讀取數據時遇到了一些問題。我能夠讀取前三列,但是列4,這個錯誤彈出-IndexError: list index out of range。爲什麼我的文件中有6列時出現此錯誤。它能夠讀取前三個並且不超過那個?在Python中讀取文件錯誤

f = open('forceCoeffs.dat', 'r') 
for line in f: 
    data = line.split() 
    frc={'time':data[0], 'Cm':data[1], 'Cd':data[2], 'Cl':data[3] } 
    print frc['time'], frc['Cm'], frc['Cd'], frc['Cl'] 

f.close() 
+0

您是否打印過數據以查看它的外觀? –

+0

向我們展示forceCoeffs.dat文件的內容。 – pancakes

+2

你確定有*總是*六列嗎?沒有空行(最後?)或更短的行? – jonrsharpe

回答

0

我覺得你的一行少於6列。 然後,line.split()不會生成具有所需數量的元素的列表。

我的建議:

添加「打印行」,所以你可以在哪一行出現錯誤看到。 添加'print len(data)',以便查看行中有多少列。

for line in f: 
    print line 
    data = line.split() 
    print len(data) 
    frc={'time':data[0], 'Cm':data[1], 'Cd':data[2], 'Cl':data[3] } 
    print frc['time'], frc['Cm'], frc['Cd'], frc['Cl'] 

如果沒有運氣,發佈有關該錯誤以及該文件的內容等

+0

非常感謝丹尼,即時獲取相同的錯誤。我跑Keith先生提供的代碼,它的工作原理... –

0

您正在試圖通過數據[3]進入第4列,但它可能可能是一些排更多細節沒有第4列的任何數據,因此錯誤列表索引超出範圍。 試試下面的代碼:

f = open('forceCoeffs.dat', 'r') 
for line in f: 
    data = line.split() 
    frc={'time':data[0] if data[0] else '', 'Cm':data[1] if data[1] else '', 'Cd':data[2] if data[2] else '', 'Cl':data[3] if data[3] else '' } 
    print frc['time'], frc['Cm'], frc['Cd'], frc['Cl'] 

f.close() 
+0

非常感謝,,,生病嘗試烏爾代碼,,,數據是正確的手段 –

0

最有可能是因爲不是所有的數據文件中的行正是你所期望的情況。這可能是一些空白行。最簡單的事情就是趕上例外並繼續。這具有忽略壞線的效果。

f = open('forceCoeffs.dat', 'r') 
for line in f: 
    data = line.split() 
    try: 
     frc={'time':data[0], 'Cm':data[1], 'Cd':data[2], 'Cl':data[3] } 
    except IndexError: 
     continue 
    print frc['time'], frc['Cm'], frc['Cd'], frc['Cl'] 

f.close() 
+0

之間沒有空格感謝很多,我會嘗試烏爾代碼,我檢查了在數據文件中沒有空格 –

+0

ur代碼完美地工作,非常感謝,,,,,你可以讓我知道爲什麼問題來了,爲什麼不在我們的代碼..謝謝你的意見,你的反饋將幫助我學習python –

+0

我想對數據做一些數學運算,我嘗試使用say,Cm = float(data [1])讀取數據爲float,但它給出一個錯誤ValueError:無法將字符串轉換爲float :Force ....如何讓它作爲浮點數來執行數學運算 - ..謝謝 –