gpt4 book ai didi

python - 读取发送到 Flask 服务器的 zip 文件而不将其存储在磁盘上

转载 作者:行者123 更新时间:2023-12-04 16:00:04 45 4
gpt4 key购买 nike

我想读取通过表单发布请求发送到 flask 服务器的特定类型的 zip 文件中的所有文件,而不必将 zip 文件存储在磁盘上。

最佳答案

首先获取获取zip文件的代码

from flask import Flask, request
app = Flask(__name__)

@app.route("/",methods=["GET"])
def page_name_get():
return """<form action="." method="post" enctype=multipart/form-data>
<input type="file" accept="application/zip" name="data_zip_file" accept="application/zip" required>
<button type="submit">Send zip file!</button>
</form>"""
app.run()

这是 post 请求函数的样子

import zipfile

@app.route("/",methods=["POST"])
def page_name_post():
file = request.files['data_zip_file']
file_like_object = file.stream._file
zipfile_ob = zipfile.ZipFile(file_like_object)
file_names = zipfile_ob.namelist()
# Filter names to only include the filetype that you want:
file_names = [file_name for file_name in file_names if file_name.endswith(".txt")]
files = [(zipfile_ob.open(name).read(),name) for name in file_names]
return str(files)

现在我将逐行检查
file = request.files['data_zip_file']首先,您需要从请求中获取文件对象,这是 werkzeug.datastructures.FileStorage 的一个实例。类(class)。
file_like_object = file.stream._file这里首先取 werkzeug.datastructures.FileStorage的stream属性这是文件的输入流。这将返回 tempfile.SpooledTemporaryFile 的实例用于临时文件的类。从该实例中,您获取 ._file 属性。这将返回 tempfile._TemporaryFileWrapper 的实例这足以像 io.BytesIO由 zipfile.ZipFile 类理解。
zipfile_ob = zipfile.ZipFile(file_like_object)您在这里创建 zipfile.Zipfile目的

现在,您应该能够使用 zip 完成几乎所有您想做的事情。要从 zip 中选择文件,请使用 zipfile_ob.open()方法并传入要打开的文件的路径。

为了获得这些路径,我们使用 file_names = zipfile_ob.namelist()这将返回一个列表,其中包含 zip 中所有文件和目录的所有路径的字符串。

然后,您可以使用 file_names = [file_name for file_name in file_names if file_name.endswith(".txt")] 过滤这些名称。

您想要的所有路径现在都在 file_names 中.然后您可以使用 open 函数提取这些文件的数据。
files = [(zipfile_ob.open(name).read(),name) for name in file_names]
在给出的示例中,我将文件路径保留在最终列表中,但如果您不想要,可以使用:
files = [zipfile_ob.open(name).read() for name in file_names]或使用其他方式查看文件。如果您想了解有关文件的更多信息,还有 infolist()可以用来代替 namelist() 的方法这将返回一个列表 ZipInfo Objects而不是仅包含字符串的列表。这些对象包含有关所有文件的更多数据。

关于python - 读取发送到 Flask 服务器的 zip 文件而不将其存储在磁盘上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60643857/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com