如何解决从 Django 中的表单数据读取 CSV 文件时出现“ValueError: I/O operation on closed file”
我希望网站用户能够将 CSV 文件上传到我的网页。该文件通过带有 FileField 的表单上传。我覆盖了 FormField 的 is_valid 方法 来检查文件是否具有 CSV 扩展名。如果表单有效,我想读取 CSV 的行并将它们保存到模型中。
is_valid 方法运行良好。但是当我尝试按照 is_valid 条件执行代码时,我遇到了“ValueError: I/O operation on closed file”。
Views.py
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST,request.FILES)
if form.is_valid():
csv_processor(form.cleaned_data['csv_file'])
#messages.success(request,'Archivo recibido para procesamiento')
return HttpResponseRedirect(reverse('home_page'))
else:
form = UploadFileForm()
return render(request,'products/csv_upload_page.html',{'form': form})
csv_processor 函数
def csv_processor(csv_file):
csv_object = TextIOWrapper(csv_file,encoding='utf-8-sig')
reader = csv.reader(csv_object)
# Code to read lines follows here
forms.py
class UploadFileForm(forms.Form):
csv_file = forms.FileField(label = 'Adjunte archivo csv',validators= [csv_content_validator])
def csv_content_validator(csv_file):
if not csv_file.name.endswith('.csv'):
raise ValidationError('Archivo debe tener extension csv')
return True
csv_object = TextIOWrapper(csv_file,encoding='utf-8-sig')
reader = csv.reader(csv_object)
first_row = next(reader)
headers = ['SKU','Price']
# Check if column names match desired names
for header_index in range(len(headers)):
# Check if first row of the CSV file contains correct names
if first_row[header_index] != headers[header_index]:
raise ValidationError('Column names don't match desired format ')
return True
IOWrapper 流似乎在 csv_processor 函数中关闭,但在验证步骤中打开。知道如何解决这个问题吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。