gpt4 book ai didi

Python - 如何一次性有效地写入/读取压缩文件中的 JSON 文件?

转载 作者:行者123 更新时间:2023-12-03 08:28:36 24 4
gpt4 key购买 nike

我正在使用 Python 3.8,并且希望将数据字典保存到压缩在存档中的 JSON 文件一次性,最好仅使用 Python标准库。例如,这意味着我的数据保存在 data.json 文件中,该文件包含在存档 compressed_data.zip 中。

现在,这是我所得到的:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: GPL-3.0-or-later

# Python Standard Library imports

import json
import zlib

# Prepare some data
data: dict = {
"common_name": "Brongersma's short-tailed python",
"scientific_name": "Python brongersmai",
"length": 290
}

# Save data to a JSON file
with open("data.json", "w", encoding="utf-8") as output_JSON_file:
json.dump(data, output_JSON_file, ensure_ascii=False, indent=4)

# Open saved JSON then compress it
with open ("data.json", "r", encoding="utf-8") as input_JSON_file:
data: dict = json.load(input_JSON_file)
# Data needs to be saved as bytes to be compressed
data_bytes: bytes = json.dumps(data, indent=4).encode("utf-8")
compressed_data = zlib.compress(data_bytes, level=zlib.Z_BEST_COMPRESSION)
with open ("compressed_data.zip" , "wb") as output_zlib_file:
output_zlib_file.write(compressed_data)

这不会产生我想要的结果,因为(a)它首先保存 JSON 文件,打开它,然后将数据保存到以 < 结尾的压缩文件中磁盘上有两个文件; (b) 压缩文件是压缩的数据,但不是可以在任何通用 GUI 压缩/解压缩程序中打开的 ZIP 文件中的 JSON 文件。

所以我的问题是:

  1. 有没有一种方法可以一次性实现我的目标,而无需先保存 JSON 文件,然后将其压缩到存档中? (即 .json 文件永远不会接触磁盘,只有 .zip 文件会接触磁盘)

  2. 如何执行相反的操作并将存档直接解压缩到 Python 中的字典中?

  3. 如果没有办法一次性实现 1. 和 2.,那么什么是相对有效的方法呢?

注意:理想情况下,我想要一个仅使用 Python 3.8 标准库的解决方案,并且压缩存档不必使用 zlib 库或 ZIP 文件。 其他高压缩比方法也很好

谢谢!

最佳答案

终于明白了。记录于此,以供日后引用。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: GPL-3.0-or-later

# Python's internal `zipfile` module
import json
import zipfile

# Prepare some data
data: dict = {
"common_name": "Brongersma's short-tailed python",
"scientific_name": "Python brongersmai",
"length": 290
}

# Use the `zipfile` module
# `compresslevel` was added in Python 3.7
with zipfile.ZipFile("compressed_data.zip", mode="w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip_file:
# Dump JSON data
dumped_JSON: str = json.dumps(data, ensure_ascii=False, indent=4)
# Write the JSON data into `data.json` *inside* the ZIP file
zip_file.writestr("data.json", data=dumped_JSON)
# Test integrity of compressed archive
zip_file.testzip()

该解决方案使用Python标准库的内部zipfile module 。关键是 zip_file.writestr() ,它允许您实质上写入 ZIP 文件内的文件。

如果还有其他解决方案,请分享!

关于Python - 如何一次性有效地写入/读取压缩文件中的 JSON 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65834655/

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