2015-08-03 26 views
0

我有一百個文件,每個文件有三列。 在Python腳本,我提取三列的每個文件:從文件中提取數據時出現IndexError

for i in range(1,100) 
    # extract data 
    os.chdir('directory/to/files') 
    fileName = 'file'+str(i).dat 
    f = open(fileName) 
    c1 = [l.split()[0] for l in f] 
    f.close() 
    f = open(fileName) 
    c2 = [l.split()[1] for l in f] 
    f.close() 
    f = open(fileName) 
    c3 = [l.split()[2] for l in f] 
    f.close() 
    doAnalysis() 

令人驚奇地,我有一個IndexError在迭代15在上面的代碼說的線12指向:list index out of range。 我認爲Python是考慮到我的file15.dat具有小於3列,所以我加了這只是前行12:

if i==15: 
c3IF = [] 
for l in f: 
    print(len(l.split()) 
    c3IF.append(l.split()[2]) 

c3IF列表似乎包含file15.dat的第三列完全和L。 split總是長度爲3.我不明白爲什麼理解列表c3在特定的迭代中失敗,而另外兩個理解列表沒有。

+0

當你做循環方法的正常時,它不會失敗嗎?它現在甚至失敗了嗎? –

+0

嘗試添加'import pdb; pdb.set_trace()'正好在'c3'的賦值之上,並且看到'l'的值在那個點上。在前幾個循環中,通過鍵入'continue'(或者實際上,將其包裝在if語句中)跳過它。這樣可以消除由打印而不是檢查實際值產生的任何含糊之處。 – Joost

回答

0

最終,我發現錯誤在第16次迭代時發生,而不是在第15次迭代時發生,而在long long file16.dat中,我有一行,第三列數據丟失,導致IndexError。