읽기 속도: pickle > gzip > xz > bz2 > json
압축률 : xz > bz2 > gzip > pkl > json
import pickle
# 쓰기: filename에 data를 직렬화 하여 저장하기
try:
with open(filename, "wb") as f:
pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
except Exception as e:
if os.path.exists(filename):
os.remove(filename)
# 읽기: filename의 data를 역직렬화 하여 가져오기 (pickle.load는 CPU I/O bound 라 멀티스레딩 불가능)
with open(filename, 'rb') as f:
data = pickle.load(f)
import pickle
import gzip
# 쓰기: filename에 data를 gzip으로 압축하여 직렬화 하여 저장하기
try:
with gzip.open(filename, 'wb') as f:
pickle.dump(data, f)
except Exception as e:
if os.path.exists(filename):
os.remove(filename)
# 읽기: filename의 data를 gzip으로 열어 역직렬화 하여 가져오기
with gzip.open(filename, 'rb') as f:
data = pickle.load(f)
import pickle
import bz2
# 쓰기: filename에 data를 bz2으로 압축하여 직렬화 하여 저장하기
try:
with bz2.open(filename, 'wb') as f:
pickle.dump(data, f)
except Exception as e:
if os.path.exists(filename):
os.remove(filename)
# 읽기: filename의 data를 bz2으로 열어 역직렬화 하여 가져오기
with bz2.open(filename, 'rb') as f:
data = pickle.load(f)
import pickle
import lzma
# 쓰기: filename에 data를 lzma(xz)으로 압축하여 직렬화 하여 저장하기
try:
with lzma.open(filename, 'wb') as f:
pickle.dump(data, f)
except Exception as e:
if os.path.exists(filename):
os.remove(filename)
# 읽기: filename의 data를 lzma(xz)으로 열어 역직렬화 하여 가져오기
with lzma.open(filename, 'rb') as f:
data = pickle.load(f)
import pickle
import zipfile
# 쓰기: filename에 data를 zipfile로 압축하여 직렬화 하여 저장하기
filename = "/Users/user/PycharmProjects/samples/test/dummy.zip"
basename = os.path.splitext(os.path.basename(filename))[0] + ".pkl"
try:
with zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) as zf:
zf.writestr(basename, pickle.dumps(data))
except Exception as e:
print(e)
if os.path.exists(filename):
os.remove(filename)
# 읽기: filename의 data를 zipfile로 열어 역직렬화 하여 가져오기
with zipfile.ZipFile(filename, 'r') as zf:
with zf.open(basename) as file:
data = pickle.load(file)
def save_compressed_pickle(data, filepath):
import pickle
import zstandard as zstd
import os
cctx = zstd.ZstdCompressor(level=22, threads=os.cpu_count() * 2)
with open(filepath, 'wb') as f:
compressed_data = cctx.compress(pickle.dumps(data, pickle.HIGHEST_PROTOCOL))
f.write(compressed_data)
import cbor2 # pip install cbor2
with open("dummy.cbor2", "wb") as f:
f.write(cbor2.dumps(data))
with open("dummy.cbor2", "rb") as f:
data2 = cbor2.loads(f.read())
print(data2)
msgpack
ujson
cbor2
sqlite3