Django上传excel文件,使用熊猫处理,以csv格式下载

时间:2018-07-20 15:45:13

标签: python django excel python-3.x pandas

我正在本地主机上运行Django(后来在LAN上运行),我的想法是可以转到网页上,单击一个提示您从计算机中选择excel文件的按钮。 Pandas会在上述excel文件上进行工作,而Django / Pandas会将该Pandas数据框的excel文件作为下载提示。

我已经运行了Django,并使用模块Django-Excel中的以下代码来实现所需的基础知识。将Excel文件输入---> excel文件,无需将文件保存到数据库或仅将其保存在内存中的任何操作。但是,我找不到找到将熊猫拔牛角的方法。我遇到的主要问题是我不确定如何使用Pandas返回Excel文件。我在离线python代码中一直使用'.to_excel()',但是,还没有找到在运行Django的localhost中使用它的方法。我确定我缺少一些非常简单的东西,但我无法理解。

也许如果有人可以举一个简单的例子,例如,上传一个excel,熊猫会将excel中的一列数字乘以2,则新的excel将输出以进行读取/保存。

from django.shortcuts import render, redirect
from django.http import HttpResponseBadRequest, HttpResponse
from _compact import JsonResponse
from django import forms
import django_excel as excel
from polls.models import Question, Choice


class UploadFileForm(forms.Form):
file = forms.FileField()


# Create your views here.
def upload(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            filehandle = request.FILES['file']
            # do pandas here to filehandle/ put filehandle into a function 
            return excel.make_response(filehandle.get_sheet(), "csv",
                                       file_name="download")
    else:
        form = UploadFileForm()
    return render(
        request,
        'upload_form.html',
        {
            'form': form,
            'title': 'Excel file upload and download example',
            'header': ('Please choose any excel file ' +
                       'from your cloned repository:')
})

非常感谢您,如果不清楚,这是我第一次在此网站上发布,如果您不明白我的要求,我会详细说明。

1 个答案:

答案 0 :(得分:1)

我将把答案上传给以后看这个的人:-)

def uploads(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            kappa = request.FILES['file']
            # Do work on kappa/excel file here with Pandas
            output = io.BytesIO()
            writer = pd.ExcelWriter(output, engine='xlsxwriter')
            kappa.to_excel(writer, index=False)
            writer.save()
            output.seek(0)
            response = HttpResponse(output,
                                content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % 'Download'
        return response
else:
    form = UploadFileForm()
return render(request, 'upload_form.html', {'form': form})

我放弃使用“ Django-excel”,而是使用了io模块中的“ BytesIO”。这具有不依赖第三方模块的优点。 您可以将Pandas数据帧写入io.BytesIO(),然后在HttpResponse中使用它。

相关问题