【问题标题】:Average in file文件中的平均值
【发布时间】:2017-10-14 22:11:39
【问题描述】:

我有这个代码

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

【问题讨论】:

  • 请正确缩进
  • 你能告诉我们你正在使用的 csv 文件的内容吗?
  • 对不起,我没有意识到问题上的缩进
  • Catch the error 并在 except 套件中打印 datosreg。他们是你所期望的吗?你的文件中有空行吗?文件中的所有行是否都有两个逗号 (,)?
  • 欢迎来到 SO。请花时间阅读How to Ask 及其包含的链接。如果您询问的是引发异常的代码,请在您的问题中包含 Traceback(格式化为代码)。

标签: python python-2.7 file


【解决方案1】:

给定脚本和输入的 csv 文件,程序对我来说可以正确运行。 我唯一改变的是将数字转换为整数prom = (int(datos[1]) + int(datos[2]))/2

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

【讨论】:

  • 您可以尝试调试它,看看您是否在变量中获取了正确的数据。我看不出这段代码 sn-p 有什么问题,我照原样复制了它,它对我有用。
【解决方案2】:

捕获错误并在 except 套件中打印 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)
...

或者,如果您不介意打印大量stuff,只需在分配给prom 之前打印regdatos。那么异常之前的最后一个 print 应该会给你一个错误的线索。

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

当您拆分 reg 时,它必须生成一个少于三个项目的列表,因此文件要么有空行,要么有少于两列的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2015-09-29
    • 2022-11-03
    • 2016-06-05
    • 2017-06-30
    相关资源
    最近更新 更多