当前位置: 首页 > 知识库问答 >
问题:

对关闭的csv文件ValueError的操作,Python代码

谭富
2023-03-14

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

我的代码有两个open语句,因为据我所知,在向第二列添加并查找平均值之前,必须关闭文件并重新打开它。

下面是我的代码,我很感激能得到的任何反馈,这对我来说毫无意义。非常感谢。

语言: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个答案

龚运乾
2023-03-14

我怀疑发生的是您将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中这是一项值得努力的工作)。

 类似资料:
  • 问题内容: 这里,是一本字典,并且都是字符串。 当我尝试写入文件时,它报告错误: 问题答案: 正确缩进;您的陈述应在区块内: 在块外部,文件已关闭。

  • 我需要帮助,请我从2天前开始尝试解决此问题,但没有成功,我是python新手,请更改代码并解释: 这是它的代码和通过scapy的arp扫描程序。它从scapy扫描中获取结果,并将扫描结果(ip和macaddress)保存到linux机器中的txt文件中 然后运行一个外部python脚本,通过以下命令:os.system("pythondetect_doublepulsar_smb.py--file

  • 当我运行我的代码时,我收到以下错误。 我正在运行的代码,如下所示: 它说错误在第41行,给出为 沟通电话有什么问题吗?

  • 有人能解释一下我的代码有什么问题吗?我得到以下错误: 回溯(最后一次调用): 文件“C:\LineRep.py”,模块中的第15行: 对于文件2中的行: 值错误:对关闭的文件执行I/O操作 我的代码:

  • 代码从卡中刮取单个事件,但我一直收到以下错误: C:\Python27\python.exeC:/用户/詹姆斯/PycharmProjects/剪贴画/scrapy.py回溯(最近的调用最后):文件"C:/用户/詹姆斯/PycharmProjects/剪贴画/scrapy.py",第31行,在writer.writerow(c)值错误: I/O关闭文件的操作 我正在使用pyCharm。 退出代码为

  • 读 # csv_reader.py import csv import sys with open(sys.argv[1], 'rt') as f: reader = csv.reader(f) for row in reader: print(row) 写 # csv_writer.py import csv import sys unicode_chars