我目前正在编写一个脚本来读取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()
答案 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中值得努力)。