2017-10-14 57 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分