django csv文件上传管理
Posted
技术标签:
【中文标题】django csv文件上传管理【英文标题】:django csv file upload managing 【发布时间】:2014-07-18 15:18:43 【问题描述】:def createlist(request):
if request.method == 'POST':
files = request.FILES['ListFile']
print(type(files))
csv_file = csv.DictReader(files)
for i in csv_file:
print(i)
return HttpResponse("ok")
这给了 类'django.core.files.uploadedfile.InMemoryUploadedFile' _csv.Error:迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?) 在这里,我使用 ajax 发布此文件 js:
$('#form1').ajaxForm(function(data)
alert(data) ;
);
【问题讨论】:
print([type(x) for x in files.readlines()])
带给你什么?
@dilbert [request.FILES['ListFile']
更改为非二进制读取模式或 b) 将所有 request.FILES['ListFile']
读取到中间文件类对象中。我会推荐一个)。
【参考方案1】:
使用 codec.iterdecode,我解决了。我认为这是由于 python 3.x
import codecs
def createlist(request):
if request.method == "POST":
fil = request.FILES['ListFile']
csvfile = csv.DictReader(codecs.iterdecode(fil, 'utf-8'))
for i in csv_file:
print(i)
return HttpResponse("ok")
【讨论】:
【参考方案2】:CSV 不支持 UTF8。它需要对类似文件的对象进行编码。更多信息请参考here。
import codecs
def createlist(request):
if request.method == "POST":
utf8_file = codecs.EncodedFile(request.FILES["ListFile"],"utf-8")
csv_file = csv.DictReader(utf8_file)
for i in csv_file:
print(i)
return HttpResponse("ok")
【讨论】:
_csv.Error: 迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)以上是关于django csv文件上传管理的主要内容,如果未能解决你的问题,请参考以下文章
MultiValueKeyDictError Django同时上传csv文件
加快 Django 表单以将大型(500k obs)CSV 文件上传到 MySQL 数据库
如何在django中上传csv文件的函数中使用外键连接模型?