【问题标题】:Python ValueError I/O operation on closed file关闭文件上的 Python ValueError I/O 操作
【发布时间】:2016-03-06 13:39:25
【问题描述】:

我知道这听起来是一个常见错误,在 stackoverflow 上已被多次询问。但是,当我阅读了几乎所有相关主题时,我很确定我的问题是新问题。

我有两个文件如下:

ALL_USER_PATH = 'all.csv'
NEW_USER_PATH = 'new.csv'

我先打开“all”文件进行阅读

with open(ALL_USER_PATH, "r") as f:
    df = pd.read_csv(f) #pd is pandas
    f.close()

接下来,我删除“新”文件的内容并准备向其中写入新数据

if os.path.isfile(NEW_USER_PATH):
    os.remove(NEW_USER_PATH)

写入它,它工作正常

with open(NEW_USER_PATH, "a") as csv_n:
    #writer_n is to write new users
    writer_n = csv.writer(csv_n, delimiter=",", lineterminator='\n')
    for user in customer_records:         
        if checkExistence(df): # a method I wrote before
            continue
        else:    
            writer_n.writerow([data_to_be_written])

接下来,我删除“all”文件并向其写入新数据

if os.path.isfile(ALL_USER_PATH):
    os.remove(ALL_USER_PATH)

with open(ALL_USER_PATH, "a") as csv_a:
    writer_a = csv.writer(csv_n, delimiter=",", lineterminator='\n')

    for user in customer_records:
        writer_a.writerow([all_data_to_be_written])

错误

“关闭文件的ValueError i/o操作”

在最后一行被抛出以将数据写入“all”文件。我想是因为我以前打开过,但我确实记得在读取数据后关闭它,不是吗?有人可以让我知道问题是什么吗?

【问题讨论】:

  • 你应该有writer_a = csv.writer(csv_a, delimiter=",", lineterminator='\n'),但你不小心重用了csv_n。如果您使用更具体的名称,它会更清晰(甚至在您使用完名称后重用名称,也可以避免这种情况)。
  • 是的,我为这个拼写错误感到非常抱歉。这就是为什么我的问题与其他问题不同的原因。我现在觉得自己好傻。
  • 每个人都会遇到拼写错误,尤其是当它只是被一封信打断的时候。很高兴它现在对你有用!
  • 如果您使用with,则无需调用f.close

标签: python csv pandas io


【解决方案1】:

我也遇到了这个错误,但发现另一个问题的答案并且有效。

将缩进块留在with open (csv file.csv) as csv: 下后,它将关闭文件。

with open('ALL_USER_PATH','a') as csv_a:
    writer_a = csv.writer(csv_n, delimiter=",", lineterminator='\n')
    # Here the file stays open
# Here the file is closed

希望我能帮上忙。

【讨论】:

  • 我从 SuperBiasedMan 的评论中找到了答案。我认为它是准确的
猜你喜欢
  • 2015-12-25
  • 2015-07-20
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 2013-09-27
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多