首页 > 系统相关 >python内存中生成excel和zip文件

python内存中生成excel和zip文件

时间:2023-01-17 16:44:45浏览次数:49  
标签:文件 zip python excel write import BytesIO

目录

python内存中生成excel和zip文件

我们知道pandas和zipfile两个库可以生成Excel文件和Zip文件,但是正常情况下会直接在服务器上生成文件,如果这些文件是一次性的或者不常用,那么就会造成资源的浪费,所以最好的方法是不在服务器生成文件,直接把该文件对象返回。

原理其实是使用BytesIO在内存中生成类文件对象,然后通过FileResponse返回, 这样就不会在本地服务器上生成该文件

BytesIO是需要.close的,但是由于FileResponse会自动关闭,所以这里不需要手动关闭

直接返回Zip文件

import zipfile
from django.http.response import FileResponse
from io import BytesIO


class TestZip(APIView):
    def get(self, request, *args, **kwargs):
        to_zip = BytesIO()
        with zipfile.ZipFile(to_zip, "w") as f:
            f.write("/Users/zonghan/Desktop/xxx.md", arcname="xxx.md")  # arcname参数为解压后的文件名,不指定的话和第一个参数一样,但是这样解压后会生成/Users/zonghan/Desktop/路径,直接指定的话解压后就为xxx.md文件
        to_zip.seek(0)  # 很重要,必须要把指针置为0,否则文件无效
        return FileResponse(
            to_zip, filename="test.zip", as_attachment=True
        )

image

直接返回Excel文件

import pandas as pd
from django.http.response import FileResponse
from io import BytesIO


class TestExcel(APIView):
    def get(self, request, *args, **kwargs):
        df = pd.DataFrame({"ID": [1, 2, 3], "NAME": ["Nick", "Bob", "Tom"]})
        to_write = BytesIO()
        df.to_excel(to_write, index=False)
        to_write.seek(0)  # 很重要,必须要把指针置为0,否则文件无效
        return FileResponse(
            to_write, filename="test.xlsx", as_attachment=True
        )

image

内存中生成Excel文件再压缩生Zip文件

import zipfile
import pandas as pd
from django.http.response import FileResponse
from io import BytesIO


class TestExcelAndZip(APIView):
    def get(self, request, *args, **kwargs):
        df = pd.DataFrame({"ID": [1, 2, 3], "NAME": ["Nick", "Bob", "Tom"]})
        to_write = BytesIO()
        df.to_excel(to_write, index=False)
        to_write.seek(0)
        with BytesIO() as to_write:
            df.to_excel(to_write, index=False)
            to_write.seek(0)
            excel_data = to_write.getvalue()  # 这里把二进制数据赋值给excel_data变量后BytesIO对象就关闭来

        to_zip = BytesIO()
        with zipfile.ZipFile(to_zip, "w") as f:
            f.writestr("xxx.xlsx", data=excel_data)
            # writestr方法是在压缩文件内生成一个文件,文件内容为data接收的参数
        to_zip.seek(0)
        return FileResponse(
            to_zip, filename="test.zip", as_attachment=True
        )

这样就在内存中生成了excel文件和zip文件,并没有在硬盘上生成文件,然后直接把文件返回,客户端获得文件

标签:文件,zip,python,excel,write,import,BytesIO
From: https://www.cnblogs.com/zonghan/p/17058144.html

相关文章

  • Python tkinter 示例
    运行结果如下:    codefromtkinterimport*fromtkinterimportmessageboxasmbimportjsonclassQuiz:def__init__(self):self.qno=0......
  • Python基础
    博客目录python基础部分基础计算机硬件python入门数据类型及常用方法垃圾回收机制用户交互与运算符流程控制数据类型内置方法字符编码文件处理函数函数的基本......
  • 还在用 Excel 和 SQL?火山引擎 VeDI 这款产品帮你更快处理数据
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群对大多数职场打工人来说,看数据、用数据一直是项有“门槛”的工作。特别是在企业业务快速......
  • snowboy 运行python3 examples/demo.py 报错bt_audio_service_open: connect() failed
    问题:环境:虚拟机  Ubuntu14.04.6LTS(GNU/Linux4.4.0-148-genericx86_64)执行snowboyexamples案例demo.py录音之后没反应,如图:  解决:sudoapt-getinstal......
  • Python实现抽奖程序
    抽奖程序  '''抽奖程序使用时可以修改嘉宾名单,然后单机‘开始’和‘停止’按钮来控制界面上名单的滚动实现抽奖功能,涉及的模块主要有多线程'''importitertoo......
  • 跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理
    摘要:本文主要讲解图像局部直方图均衡化和自动色彩均衡化处理。这些算法可以广泛应用于图像增强、图像去噪、图像去雾等领域。本文分享自华为云社区《​​[Python从零到壹]......
  • 跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理
    摘要:本文主要讲解图像局部直方图均衡化和自动色彩均衡化处理。这些算法可以广泛应用于图像增强、图像去噪、图像去雾等领域。本文分享自华为云社区《[Python从零到壹]五......
  • 如何在EXCEL VBA中从DATE格式更改为数字?
    我将项目存储在字典中,其中键为date,例如'2012/05/11'。默认情况下,该键被改为数字(41040)。当我想要检索该项目时,我需要通过编号:dFRmonths.Item(41040)来引用它。由于dFRmonths......
  • python zipfile处理压缩文件
    目录pythonzipfile处理压缩文件ZIP文件入门什么是ZIPFile?为什么使用ZIPFiles?Python能处理ZIP文件吗?使用Python的zipfile操纵已存在的ZIP文件打开ZIP文件......
  • python中的代码运行时间获取方式
    python中的代码运行时间获取方式​ 我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈就是电脑运行代码所需要的时间。......