python - Django上传excel文件,用pandas处理,下载为csv

标签 python django excel python-3.x pandas

我在本地主机上运行 Django(稍后在 LAN 上运行),我的想法是我可以进入网页,单击一个按钮,系统会提示您从计算机中选择一个 excel 文件。 Pandas 将处理上述 excel 文件,Django/Pandas 将制作此 Pandas 数据框的 excel 文件作为下载提示。

我已经运行了 Django,并使用“Django-Excel”模块中的以下代码完成了我想要的基本操作。 Excel 文件输入 ---> Excel 文件输出,无需将文件保存到数据库或任何其他内容,只是将其保留在内存中。但是,我找不到办法将 Pandas 塞进去。我遇到的主要问题是我不确定如何使用 Pandas 返回 Excel 文件。我一直在离线 python 代码中使用“.to_excel()”,但是,还没有找到在运行 Django 的本地主机中使用它的方法。我确信我错过了一些非常简单的东西,但我就是无法得到它。

也许如果有人可以展示一个简单的例子,比如上传一个 Excel,pandas 会将 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:')
})

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

最佳答案

我会为将来关注此问题的任何人上传我的答案:-)

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 中使用它。

关于python - Django上传excel文件,用pandas处理,下载为csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446156/

相关文章:

python - 如何在一个 View 中调用多个函数

python - 如何使用 Angular 客户端和 Django 服务器处理读取、提取和保存极大的 csv 或 excel 数据

excel - 创建一个集合作为字典的值

Excel:将秒转换为 dd 天 hh:mm:ss 格式

python - 为什么我的递归搜索功能不起作用?

python - 给定 (5,2) 张量,删除第二列中具有重复项的行

Python 元组根据最后一个元素排序

django - “NoneType”对象没有属性 'save' Django

vba - 从矩阵到单列的唯一列表

Python JSON try except block 不起作用