Python – как эффективно записать/прочитать файл JSON внутри сжатого архива за один раз?Python

Программы на Python
Гость
Python – как эффективно записать/прочитать файл JSON внутри сжатого архива за один раз?

Сообщение Гость »

Я использую 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) сжатый файл представляет собой сжатые данные, а не файл JSON в ZIP-файле, который можно открыть в любой стандартной программе сжатия/распаковки с графическим интерфейсом.
Итак, мои вопросы:
  • Есть ли способ достичь моей цели за один раз, не сохраняя файл JSON сначала потом сжать в архив? (т. е. файл .json никогда не касается диска, это касается только файла .zip)
  • Как сделать обратное и распаковать из архива непосредственно в словарь Python?
  • Если нет способ сделать 1. и 2. за один раз, какой способ сделать это в любом случае будет относительно эффективным?
Примечание. В идеале мне бы хотелось, чтобы решение использовало только стандартную библиотеку Python 3.8, а сжатый архив не обязательно должен использовать библиотеку zlib или быть ZIP-файлом. Другие методы с высокой степенью сжатия тоже подойдут.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/658 ... -archive-i

Вернуться в «Python»