对关闭的 csv 文件的操作 ValueError,Python 代码
operation on closed csv file ValueError, Python Code
我目前正在编写一个脚本来读取 CSV 文件中的两列浮点数并计算每列的平均值。我不明白为什么我的代码在关闭的文件上给我一个 ValueError I/O 操作。
我的代码有两个 open 语句,因为据我了解,您必须关闭文件并重新打开它,然后才能将平均值添加到第二列。
我的代码在下面,我很感激我能得到的任何反馈,这对我来说没有意义。谢谢你。
语言:Python3.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()
我怀疑发生的事情是您将 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 to read the csv and then calculate the average using pandas mean 并避免循环(在 Python 中值得努力)。
我目前正在编写一个脚本来读取 CSV 文件中的两列浮点数并计算每列的平均值。我不明白为什么我的代码在关闭的文件上给我一个 ValueError I/O 操作。
我的代码有两个 open 语句,因为据我了解,您必须关闭文件并重新打开它,然后才能将平均值添加到第二列。
我的代码在下面,我很感激我能得到的任何反馈,这对我来说没有意义。谢谢你。
语言:Python3.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()
我怀疑发生的事情是您将 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 to read the csv and then calculate the average using pandas mean 并避免循环(在 Python 中值得努力)。