2017-01-13 63 views
0

我正在處理用戶句子的壓縮和解壓縮代碼。 我有此代碼:壓縮句子

import gzip 
sentence = input(b"Please enter a sentence ") 
varNameIn = (b"sentence") 
varNameOut = gzip.compress(varNameIn) 
print(varNameOut) 
varNameDecon = gzip.decompress(varNameOut) 
print(varNameDecon) 

但是有什麼不對勁。它的工作原理與放出來的:

b'Please進入了一句 'GN^h B' \ X1F \ x8b \ X08 \ x00Z \ xedxX \ X02 \ XFF + N \ XCD + I \ xcdKN \ X05 \ X00 \ xd5Nf \ x9d \ x08 \ x00 \ x00 \ x00' b'sentence'

爲什麼它會顯示b'sentence而不是用戶的句子,以及何時它要求一個句子爲什麼有b'請輸入... 我被告知b''將在代碼的將來步驟中壓縮該句子。 有什麼幫助嗎? 謝謝

+2

呃,因爲你定義'varNameIn'爲'B「的」'。 –

+0

@DanielRoseman:我的猜測是:這是一個嘗試將'語句'值轉換爲'字節'對象。 –

回答

2

b"sentence"不會將sentence轉換爲bytes值。您需要改爲encode a string to bytes。選擇適合您使用案例的編解碼器;這裏編碼成UTF-8可能是最好的,因爲它可以編碼所有的Unicode的,具有合理的尺寸小了中西文:

sentence = input("Please enter a sentence ") 
varNameIn = sentence.encode('utf8') 
varNameOut = gzip.compress(varNameIn) 

注意input()總是返回str類型,給它一個bytes系統將不提示改變這一點。

請注意,當您再次解壓縮數據時,您仍然會有一個bytes對象。如果你想要把這一回一個str對象,decode from bytes to str使用相同的編碼:

varNameDecon = gzip.decompress(varNameOut) 
print(varNameDecon.decode('utf-8')) 
+0

謝謝你的作品! –