正在实现解压缩算法,但获取“密钥错误:0”

2024-04-16 13:18:12 发布

您现在位置:Python中文网/ 问答频道 /正文

**压缩功能**

def lzwCompressionText (text):
start= time.time()
with open(text, 'r',encoding="utf-8") as file:
    data = file.read()
#print("data",data)
#Costruzion,del del Dizionario
print("Compressing")
lenDictionary = 256
dictionary = defaultdict(dict)
print("iniziale", dictionary)
compressed = []
stringSaved=""


for string_symbol in data:
    sc =  stringSaved + string_symbol
    if sc in dictionary :
        stringSaved = sc
    else:
        compressed.append(dictionary[stringSaved])
        dictionary[sc] = lenDictionary
        lenDictionary += 1
        stringSaved= string_symbol
if stringSaved in dictionary:
    compressed.append(dictionary[stringSaved])
   # print ("Compressed", compressed)

output= open("CompreText.bin", "wb")
pickle.dump(compressed, output)
stop = time.time()
finalCompression = (stop - start)
minute = int(finalCompression / 60)
seconds = int(finalCompression % 60)
print("Minute :", minute,"second",seconds)

output.close()

return compressed

我正在实现解压算法。但是这个错误“key error:0”出现了

在这部分代码中,加载压缩文件生成的bin文件,初始化词汇表

def lzwDecompressionText (pathText) :
    loadCompressed = open ("CompreText.bin","rb")
    compressed = pickle.load(loadCompressed)    
    print("", compressed)
    lenDictionary = 256
    dictionary = defaultdict(dict)
       
    s = pathText= compressed.pop(0)
    
    for k in compressed :
        if k in dictionary:
            ins = dictionary[k]
        elif k == lenDictionary:
            ins = s + s[0]
        else:
            raise ValueError()
        pathText += ins
        dictionary[lenDictionary] = s + ins[0]
        lenDictionary +=1
        s = ins

搜索词典时,它会给我一个错误:键错误“0”。我也试着编辑字典,但总是出现同样的错误

Traceback (most recent call last):
  File "c:/Users/anton/Documents/GitHub/Project-LZW/LZW-Project/test.py", line 21, in <module>
    lzwDecompressionText(pathText)
  File "c:\Users\anton\Documents\GitHub\Project-LZW\LZW-Project\textLzw.py", line 68, in lzwDecompressionText
    ins = s + s[0]
KeyError: 0

Tags: inprojectdatadictionarytime错误opencompressed