关闭csv文件的操作ValueError,Python Code

时间:2017-12-01 05:00:01

标签: python python-3.x csv valueerror

我目前正在编写一个脚本来读取CSV文件中的两列浮点数,并找到每列的平均值。我不明白为什么我的代码在关闭文件上给我一个ValueError I / O操作。

我的代码有两个开放语句,因为根据我的理解,你必须关闭文件并在添加并找到第二列的平均值之前重新打开它。

我的代码如下,我感谢我能得到的任何反馈,这对我没有意义。谢谢。

语言:Python 3.6

def main():
    import csv

    file = input("What is the name of the file, dont forget the .csv: ")
    INFILE = open(file,"r")
    totalCol1 = 0
    countCol1 = 0
    totalCol2 = 0
    countCol2 = 0
    read = csv.reader(INFILE,lineterminator=",")

    # Loop through column 1
    for row in read:
        totalCol1 += float(row[0])
        countCol1 += 1
    averageCol1 = totalCol1 / countCol1
    INFILE.close()

    INFILE = open(file,"r")
    for row in read:
        totalCol2 += float(row[1])
        countCol2 += 1
    averageCol2 = totalCol2 / countCol2

    print('Average for Column One:%5.2f' % averageCol1)
    print('Average for Column Two:%5.2f' % averageCol2)
    INFILE.close()

main()

1 个答案:

答案 0 :(得分:2)

我怀疑发生的事情是你将一个INFILE实例传递给csv.reader然后关闭。因此,当您再次打开文件时,需要将该新实例传递给csv.reader。

尽管如此,您可以在第一个循环中执行所有操作,而无需关闭并重新打开文件:

for row in read:
    totalCol1 += float(row[0])
    countCol1 += 1

    totalCol2 += float(row[1])
    countCol2 += 1

averageCol1 = totalCol1 / countCol1
averageCol2 = totalCol2 / countCol2

或者您可以使用pandas read_csv来读取csv,然后使用pandas mean计算平均值并避免循环(在Python中值得努力)。