Python zlib decompress()只解码第一行

Python zlib decompress()只解码第一行,python,utf-8,compression,zlib,Python,Utf 8,Compression,Zlib,我有一个名为idf的大型字典(超过1000个条目),我想将它的所有值()存储在一个压缩的.txt文件中。这是我的密码 for key in idf: data = str(idf[key]) compressed_index = zlib.compress(data.encode('ISO-8859-1')) with open(current_inverted_index, "ab") as my_file: my_file.write(compress

我有一个名为
idf
的大型字典(超过1000个条目),我想将它的所有
值()
存储在一个压缩的.txt文件中。这是我的密码

for key in idf:
    data = str(idf[key])
    compressed_index = zlib.compress(data.encode('ISO-8859-1'))
    with open(current_inverted_index, "ab") as my_file:
        my_file.write(compressed_index)
压缩结束后,我的新.txt文件的大小为(443MB),前几行如下所示:

xúãÆVw∞∞4422–5000T∑R®6¨≠’Q@76âõa»òÉdå
1ıò[Ädåå±»XÇm16Ø≠ç»5%xúµö;í$7DØ2ûúUI+O7êØ–I∫ª*¿ÍŸ e ÿâÆÆÊH$‡˛˘˜/øˇ1W.%˝öR ø¸ˆıwÓ˘«W˘Ò’r˚Ò’≥>µÙ|Sè΢3ü9?flŸzõ=_}üûØj~Fw[ˇ¸Û„ÎÁ…ã&/Îô/€3$Ø©   ûm<Oœ–RüwVüOYsñ¢üÆtŒdl”‘ûÍ≥â¢aââü+ÈÎTı]}˛ˆŒoµŸÁ≈*œS”j5˜Á'zπ,Ϋú}uΩy˛ïgãıUM;KM¥kç2ôb…ûS6z墰C¶—≤CfºÊ‘Ψ ßû◊ÛzvΩ÷÷üÔÊ–Óµ@≈J˘±ã
Œê5ô∂i3üˆ®≤áu-•a1¥idÎÁœé(œÎ5t»G∂≈pY†>/ ÁÿƱ-„π≠◊pgùXBF¿8≤ZÔ2∏æörÔ‘ÃM ÂC3wY.ëÕ≤∆Á%ØÈI√≥ÜcJπ0∑À'‡ê7ãòM€œ$EP.Cèì¡v^\î"h◊.§Oç∆ûmîcTNÙA>¬äX¸¸⁄øÏŸáfî€eú<RÑ#-)º6ç%ë≤î∆∏_‰flv∆U&hMªl⁄•5·Iß4˘F«`7µ»öz©ïõ&û†l{ àô™–ê˜5C9—ì „<Ò˚“óflxÄ&_ÍÙQv¿jÄÔ∂Ê©og¡£ˆ4N¿d&SZùwêf^5§**MññÛ≤≥¿;V"º-Èg]üÜöZ®]ú∏RÚër ºÍ¬‰ ˜®ÀÎ3>Ÿ’ÆX´:öv£äCKăFÇÏäâ4:µòß≠,‡<Ü9'rîàπ1ê»i|∑πç™∞¥;

我不知道问题出在哪里,也不知道为什么我只解码.txt文件的一小部分,而不是全部

使用序列化库(如
pickle
(不安全)或
json
)一次压缩整个字典:

import zlib
import pickle

index = 'index.txt'

idf = dict(zip('abcdefghijklmnop',range(16)))

compressed_index = zlib.compress(pickle.dumps(idf))
with open(index, 'wb') as my_file:
    my_file.write(compressed_index)

with open(index, 'rb') as f:
    decompressed_data = zlib.decompress(f.read())
print(pickle.loads(decompressed_data))

我猜
zlib.compress(data)
会在blob的末尾写入一些EOF(文件结束)标记。阅读时,它会在这个提示下停止。看一看物体。它提供了一个方法,返回zlib在上一次调用
Decompress.Decompress()
时未使用的剩余内容。大家好,谢谢你们的帮助。我仍然非常困惑…也许你应该使用一种更容易处理的格式。我建议,但是存储结构化数据有很多选择。如果文件太大,可以通过Python的
gzip
库对其进行压缩。
import zlib
import pickle

index = 'index.txt'

idf = dict(zip('abcdefghijklmnop',range(16)))

compressed_index = zlib.compress(pickle.dumps(idf))
with open(index, 'wb') as my_file:
    my_file.write(compressed_index)

with open(index, 'rb') as f:
    decompressed_data = zlib.decompress(f.read())
print(pickle.loads(decompressed_data))
import zlib
import json

index = 'index.txt'

idf = dict(zip('abcdefghijklmnop',range(16)))
compressed_index = zlib.compress(json.dumps(idf).encode())
with open(index, 'wb') as my_file:
    my_file.write(compressed_index)

with open(index, 'rb') as f:
    decompressed_data = zlib.decompress(f.read()).decode()
print(json.loads(decompressed_data))