我有这段代码
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 :(得分:0)
鉴于脚本和输入csv文件,程序正确地为我运行。
我改变的唯一事情是将数字转换为整数prom = (int(datos[1]) + int(datos[2]))/2
确保使用正确的输入文件,并检查是否有空行或少于2个参数的行。(2逗号)
答案 1 :(得分:0)
抓住错误并在套件中打印datos
和reg
。它们是你所期望的吗?文件中是否有空行?文件中的所有行有三列。?
...
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
之前打印datos
和prom
即可。然后在异常之前的最后一个 print 应该会给你一个错误的线索。
...
datos = reg.split(",")
print('datos:{} | reg:{}'.format(datos, reg))
prom = (datos[1] + datos[2])/2
...
当您分割reg
时,它必须生成一个包含少于三个项目的列表,因此该文件有空行或少于两个列的行。