valueerror: 生成 csv 文件并在 django 中保存到模型时对已关闭文件的 i/o 操作

Posted

技术标签:

【中文标题】valueerror: 生成 csv 文件并在 django 中保存到模型时对已关闭文件的 i/o 操作【英文标题】:valueerror: i/o operation on closed file when generating csv file and saving to model in django 【发布时间】:2021-05-12 03:29:06 【问题描述】:

当我尝试生成 csv 文件并保存到模型时,我收到“valueerror: i/o operation on closed file”

class PaymentReport(View):
def post(self, request):
    client = self.request.user.client
    user = self.request.user
    from_date = request.POST.get('from_date')
    to_date = request.POST.get('to_date')
    with NamedTemporaryFile() as payment_journal:
        
        csv_writer = csv.writer(payment_journal)
        csv_writer.writerow( ['Transaction type','Account reference','Nominal code','Department','Transaction Date'])
        invoice_report = Invoice.objects.filter(client=client,created_at__range=[from_date, to_date],is_self_invoice=True)
        for row in invoice_report:
            
            transaction_type ='Purchase Payment'
            account_reference = '1300'  
            nominal_code ='1200'
            department = 'Forest'
            date = row.created_at.date()
            
          
            
            csv_writer.writerow([transaction_type,account_reference,nominal_code,department,date])
        payment = PaymentDownload.objects.create(client=client,csv_file=File(payment_journal,'payment_download.csv'))  
     
        payment.save()
       
    return redirect(reverse('worker:report_list'))

这里如何将我的 csv 文件保存到 PaymentDownload 表,以便我以后可以下载它并且我的 aws 存储桶是私有的

【问题讨论】:

【参考方案1】:

IO operation on closed file 异常是由这个块引起的:

with NamedTemporaryFile() as payment_journal:
    csv_writer = csv.writer(payment_journal)
    # ...
payment = PaymentDownload.objects.create(client=client, csv_file=File(payment_journal, 'payment_download.csv'))

由于 dedent,您在 with 块之外使用 payment_journal,它对应于上下文管理器。当到达with 块的末尾时,文件被关闭,您不能再对payment_journal 执行 i/o 操作。

【讨论】:

以上是关于valueerror: 生成 csv 文件并在 django 中保存到模型时对已关闭文件的 i/o 操作的主要内容,如果未能解决你的问题,请参考以下文章

数字后带有减号的 CSV 文件。 “ValueError:无法将字符串转换为浮点数:”

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

在 SciKit 线性回归中获取“ValueError:形状未对齐”

无法纠正 - ValueError: unknown url type: Link

ValueError : 对已关闭文件的 I/O 操作

ValueError:数组不能包含 infs 或 NaNs