如何 json 在 Zipfile.open 进程中转储?
How to json dump inside Zipfile.open process?
我正在尝试在 ZipFile BytesIO 进程中编写 json。它是这样的:
import io
from zipfile import ZipFile
import json
in_memory_zip = io.BytesIO()
with ZipFile(in_memory_zip, 'w') as zipfile:
with zipfile.open("1/1.json", 'w') as json_file:
data = {'key': 1}
json.dump(data, json_file, ensure_ascii=False, indent=4)
稍后保存在 Django 文件字段中。然而它并没有将dump
的数据转化为json_file
。发现很难,因为它不报告错误消息。
您的代码 'shadows' zipfile
,这本身不会成为问题,但如果您稍后在代码中需要 zipfile
,则会导致问题。通常,不要隐藏标准库标识符和 Python 关键字。
为什么这是个问题,我不知道,但看起来 json.dump
期望文件指针提供一些东西,而 ZipFile.open()
得到的类文件对象却没有。
这是解决该问题的方法:
import io
from zipfile import ZipFile
import json
in_memory_zip = io.BytesIO()
with ZipFile(in_memory_zip, 'w') as zf:
with zf.open("1/1.json", 'w') as json_file:
data = {'key': 1}
data_bytes = json.dumps(data, ensure_ascii=False, indent=4).encode('utf-8')
json_file.write(data_bytes)
我正在尝试在 ZipFile BytesIO 进程中编写 json。它是这样的:
import io
from zipfile import ZipFile
import json
in_memory_zip = io.BytesIO()
with ZipFile(in_memory_zip, 'w') as zipfile:
with zipfile.open("1/1.json", 'w') as json_file:
data = {'key': 1}
json.dump(data, json_file, ensure_ascii=False, indent=4)
稍后保存在 Django 文件字段中。然而它并没有将dump
的数据转化为json_file
。发现很难,因为它不报告错误消息。
您的代码 'shadows' zipfile
,这本身不会成为问题,但如果您稍后在代码中需要 zipfile
,则会导致问题。通常,不要隐藏标准库标识符和 Python 关键字。
为什么这是个问题,我不知道,但看起来 json.dump
期望文件指针提供一些东西,而 ZipFile.open()
得到的类文件对象却没有。
这是解决该问题的方法:
import io
from zipfile import ZipFile
import json
in_memory_zip = io.BytesIO()
with ZipFile(in_memory_zip, 'w') as zf:
with zf.open("1/1.json", 'w') as json_file:
data = {'key': 1}
data_bytes = json.dumps(data, ensure_ascii=False, indent=4).encode('utf-8')
json_file.write(data_bytes)