文件中的平均值

时间:2017-10-14 22:11:39

标签: python python-2.7 file

我有这段代码

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行表示列表索引超出范围。有谁知道。

2 个答案:

答案 0 :(得分:0)

鉴于脚本和输入csv文件,程序正确地为我运行。 我改变的唯一事情是将数字转换为整数prom = (int(datos[1]) + int(datos[2]))/2

确保使用正确的输入文件,并检查是否有空行或少于2个参数的行。(2逗号)

答案 1 :(得分: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)
...

或者,如果您不介意进行大量内容打印,只需在分配到reg之前打印datosprom即可。然后在异常之前的最后一个 print 应该会给你一个错误的线索。

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

当您分割reg时,它必须生成一个包含少于三个项目的列表,因此该文件有空行或少于两个列的行