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:形状未对齐”