作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 zip
文件,当用户上传文件时我会收到该文件。 zip
本质上包含一个 json
文件,我想读取和处理它,而不必先创建 zip
文件,然后解压缩它然后读取内部文件的内容。
目前我只有较长的过程,如下所示
import json
import zipfile
@csrf_exempt
def get_zip(request):
try:
if request.method == "POST":
try:
client_file = request.FILES['file']
file_path = "/some/path/"
# first dump the zip file to a directory
with open(file_path + '%s' % client_file.name, 'wb+') as dest:
for chunk in client_file.chunks():
dest.write(chunk)
# unzip the zip file to the same directory
with zipfile.ZipFile(file_path + client_file.name, 'r') as zip_ref:
zip_ref.extractall(file_path)
# at this point we get a json file from the zip say `test.json`
# read the json file content
with open(file_path + "test.json", "r") as fo:
json_content = json.load(fo)
doSomething(json_content)
return HttpResponse(0)
except Exception as e:
return HttpResponse(1)
如您所见,这涉及 3 个步骤以最终将 zip
文件中的内容获取到内存中。我想要的是获取 zip
文件的内容并直接加载到内存中。
我确实在堆栈溢出中发现了一些类似的问题,比如这个 https://stackoverflow.com/a/2463819 .但是我不确定在什么时候调用帖子中提到的这个操作
我怎样才能做到这一点?
注意:我在后端使用 django。 zip 中始终会有一个 json 文件。
最佳答案
据我了解,@jason 想表达的意思 here是首先打开一个 zipFile,就像您在此处所做的那样 with zipfile.ZipFile(file_path + client_file.name, 'r') as zip_ref:
。
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
Open a ZIP file, where file can be either a path to a file (a string) or a file-like object.
然后使用BytesIO读取类文件对象的字节。但是从上面你正在阅读 r
模式而不是 rb
模式。所以改变它如下。
with open(filename, 'rb') as file_data:
bytes_content = file_data.read()
file_like_object = io.BytesIO(bytes_content)
zipfile_ob = zipfile.ZipFile(file_like_object)
现在可以从内存访问zipfile_ob
。
关于python - 如何在python中上传文件时读取内存中zip文件的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60515436/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!