2017-10-14 88 views
0

我有這樣的代碼平均在文件

def PromNotas(): 
    archivo = open ("archivo.csv","r") 
    archivo2 = open ("archivo2.csv","w") 
    for reg in archivo: 
     reg = reg.strip("\n") 
     datos = reg.split(",") 
     prom = (datos[1] + datos[2])/2 
     reg2 = datos[0] + "," + datos[1] + "," + datos[2] + "," + str(prom) 
     if prom >= 7: 
      reg2 = reg2 + "," + "Aprobado\n" 
     else: 
      reg2 = reg2 + "," + "Desprobado\n" 
     archivo2.write(reg2) 
    archivo.close() 
    archivo2.close() 

CSV文件看起來是這樣的:

Matt,7,8 
John,9,6 
Jim,6,7 

所有代碼的作品,但的prom = (datos[1] + datos[2])/2它說行了列表索引超出範圍。有誰知道一些事情。

+0

請正確縮進 – efkin

+0

您能告訴我們您正在使用的csv文件的內容嗎? – DobromirM

+0

抱歉,我沒有意識到問題 – MattZ

回答

0

鑑於腳本和輸入csv文件,程序爲我正確運行。 我唯一改變的是鑄造的數字爲整數prom = (int(datos[1]) + int(datos[2]))/2

確保您使用的是正確的輸入文件,並檢查沒有任何空行或與他們不到2個參數。(2逗號)

+0

我已經測試過,但是出現同樣的錯誤 – MattZ

+0

您可以嘗試調試它,看看您是否正在變量中獲取正確的數據。我看不到這個代碼片段的任何問題,我把它複製,因爲它和它爲我工作。 – DobromirM

0

捕獲錯誤並在除了套件外打印datosreg。他們是你所期望的嗎?文件中是否有空行?做全部行中的文件有三列。

... 
    datos = reg.split(",") 
    try: 
     prom = (datos[1] + datos[2])/2 
    except IndexError as e: 
     print('datos:{} | reg:{}'.format(datos, reg)) 
     #raise 

    reg2 = datos[0] + "," + datos[1] + "," + datos[2] + "," + str(prom) 
... 

或者,如果你不介意很多東西印刷的,纔剛剛分配給prom之前打印regdatos。然後最後的打印之前,異常應該給你一個線索什麼是錯的。

... 
    datos = reg.split(",") 
    print('datos:{} | reg:{}'.format(datos, reg)) 
    prom = (datos[1] + datos[2])/2 
... 

當你分割reg它必須產生少於三個項目的列表,以便該文件要麼有空白行或小於2分