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

从csv文件获取数据:对关闭的文件执行IO操作时出错

帅银龙
2023-03-14

错误:##

Tkinter回调中的异常

回溯(最近一次呼叫最后一次):

文件“C:\Users\hp-\AppData\Local\Programs\Python\Python35-32\lib\tkinter\uuuuuu init\uuuuuuuuu.py”,第1549行,在call return self中。func(*args)

文件"C:\用户\hp-\下载\pyguii.py",第120行,combine_funcs推荐()

文件“C:\Users\hp-\Downloads\pyguii.py”,第114行,在读卡器的推荐行:

文件“C:\Users\hp-\AppData\Local\Programs\Python\Python35-32\lib\csv.py”,第109行,在下一个self中。字段名

文件"C:\用户\hp-\AppData\本地\程序\Python\Python35-32\lib\csv.py",第96行,字段名称

self._fieldnames = next(self.reader) ValueError: I/O operation on closed file.
def getrate():
    stem=tk.Toplevel(root)
    a1=Label(stem,text='Which type of songs will you like to listen')
    a1.grid(row=0,column=0)  
    var2 = IntVar()
    dd1 = Radiobutton(stem, text="Hindi songs", variable=var2, value=1)
    dd1.grid(row=1,column=1)
    label = Label(stem)  
    dd2 = Radiobutton(stem, text="Punjabi songs", variable=var2, value=2)
    dd2.grid(row=2,column=2)
    label = Label(stem)  


def getcat1():
    gg2=var2.get()
    fields.append(gg2)
    with open(r'category.csv', 'a') as f:
            writer = csv.writer(f)
            writer.writerow(fields)
    print(gg2)

def recommend():
    with open('listsng.csv') as csvfile:
         reader = csv.DictReader(csvfile)
         #print (reader)
    for row in reader:
         if '2015' in row['Year'] and 'Hindi' in row['Category']:
             print(row['Song Name'])

def combine_funcs():
    getcat1()
    recommend()
ee=Button(stem,text='Submit',command=combine_funcs)
ee.grid(row=10,column=2)
ee1=Button(stem,text='Skip',command='')
ee1.grid(row=10,column=4)

共有1个答案

濮阳旺
2023-03-14

您正试图在文件关闭后访问读取器,该文件已在其打开的上下文之外关闭。将推荐函数中的for循环移动到with的上下文中,如下所示:

def recommend():
    with open('listsng.csv') as csvfile:
         reader = csv.DictReader(csvfile)
         #print (reader)
         for row in reader:
             if '2015' in row['Year'] and 'Hindi' in row['Category']:
                 print(row['Song Name'])

Python中的with语句创建了一个上下文,在这种情况下,为文件对象创建了一个上下文。一旦你离开上下文,Python关闭文件并做一些清理。因此,与文件对象相关的所有操作都必须在打开文件的上下文中执行。

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

  • 我目前正在编写一个脚本,读取CSV文件中两列浮点数,并找到每列的平均值。我不明白为什么我的代码给我一个关闭文件的ValueError I/O操作。 我的代码有两个open语句,因为据我所知,在向第二列添加并查找平均值之前,必须关闭文件并重新打开它。 下面是我的代码,我很感激能得到的任何反馈,这对我来说毫无意义。非常感谢。 语言:Python 3.6

  • 我从Theano和Keras开始深入学习。但是,对于任何程序,我都必须加载数据集,而我无法加载任何数据集。 即使我运行这两行:- 我甚至用minst数据集尝试了上述方法。完全相同的错误。 我试着一个接一个地运行命令,第一次导入很顺利。在第二个命令中,它运行,python开始下载。然而,几秒钟后,它就断了。 这就是确切的错误:- (X_列,y_列),(X_测试,y_测试)=cifar10。load_

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

  • 我用谷歌浏览器创建了一个“.har”文件,创建了一个加特林模拟。我改变了输入参数

  • 读 # 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