【问题标题】:django csv file upload managingdjango csv文件上传管理
【发布时间】: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 [, ,
  • 叮,叮,叮,我们赢了!!
  • @dilbert 任何将文件读取为 dictreader 以获取字典的解决方案
  • 您需要 a) 将 request.FILES['ListFile'] 更改为非二进制读取模式或 b) 将所有 request.FILES['ListFile'] 读取到中间文件类对象中。我会推荐一个)。

标签: javascript jquery python django python-3.x


【解决方案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: 迭代器应该返回字符串,而不是字节(您是否以文本模式打开文件?)
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多