【问题标题】:django 1.5 how to read csv from memorydjango 1.5 如何从内存中读取 csv
【发布时间】:2023-03-11 03:31:01
【问题描述】:

我正在尝试了解如何在不将其保存到磁盘的情况下读取上传的 CSV ...

我卡在 form.cleaned_data['file'].read ... 我似乎没有得到任何输出

如果我只能弄清楚如何获得输出,那么我可以编写一个适当的函数来处理数据行。

#addreport.html
<form enctype="multipart/form-data" method="post" action="/products/addreport/">   {%csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />

#forms.py
from django import forms
#
class UploadFileForm(forms.Form):
    file  = forms.FileField()

--

# views.py
def addreport(request):
if request and request.method == "POST":
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
               print form.cleaned_data['file'].read()
    else:
        print form.errors
        print request.FILES
        #form = UploadFileForm()
else:
    form = UploadFileForm()

return render_to_response('products/addreport.html', {'form': form},context_instance=RequestContext(request))

【问题讨论】:

    标签: django file-upload csv


    【解决方案1】:

    我的一个项目的设置非常相似。您的表单中有任何干净的方法吗?

    否则我认为你可以从form.cleaned_data['file']读取文件就好了:

    import csv
    
    def addreport(request):
        if request.method == "POST":
            form = UploadFileForm(request.POST, request.FILES)
            if form.is_valid():
                reader = csv.reader(form.cleaned_data['file'])
                for row in reader:
                    print row
            else:
                print form.errors
                print request.FILES
                #form = UploadFileForm()
        else:
            form = UploadFileForm()
    
        return render(request, 'products/addreport.html', {'form': form})
    

    如果不起作用,请尝试直接使用request.FILES['file'],而不是form.cleaned_data['file']

    希望对你有帮助。

    【讨论】:

    • 我假设您仍在本地主机中进行测试?你应该能够在终端中看到一些东西(print row 的结果)。
    • 我实际上是在 OpenShift 上测试
    • 嗯,我认为你看不到终端输出。你想对 csv 的输出做什么?
    • 问题是我没有意识到 Django 不会输出原始输出,除非它是 HTTP 响应。
    • 在 python 3.5 上获得iterator should return strings, not bytes。解决方案stackoverflow.com/a/16243182/3148949
    【解决方案2】:

    你可以试试:

    import csv
    
    #In your view
    line_reader = csv.reader(form.cleaned_data['file'])
    for row in line_reader:
        #do something with each row.
    

    【讨论】:

    • csv 模块不是可调用的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2016-10-26
    • 2023-03-21
    • 2021-12-10
    相关资源
    最近更新 更多