2011-01-30 13 views
15

Zlib'i metin sıkıştırması için kullanmaya çalışıyorum.Metin nasıl sıkıştırılır?

Mesela ben S=zlib.compress(T) Şimdi ne istiyorum ben bu T sıkıştırmasını böylece S ASCII formunu elde etmektir kullanıyorum bunun için ama farklı bir programda onu sıkıştırmak için gereken bir metin T='blah blah blah blah' var. sayesinde

DÜZENLEME:

import zlib, base64 
text = 'STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW ' 
code = base64.b64encode(zlib.compress(text,9)) 
print code 

verir:

eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU= 

Şimdi ben farklı bir programa bu kodu kopyalayıp Ben burada bunu çözmek için bir yöntem var sanırım yoludur

import zlib, base64 
s='eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU=' 
data = zlib.decompress(base64.b64decode(s)) 
print data 

Pl: orijinal Program geri almak için Aynı şekilde tutarlı olarak daha iyi sonuçlar verecek başka bir sıkıştırma yönteminin farkında olup olmadığını öneririz.

+0

Kullanım zlib S sıkıştırması? – arthurprs

+0

Başka bir programda [zlib.decompress()] (http://docs.python.org/library/zlib.html#zlib.decompress) kullanılmasını engelleyen nedir? –

+0

Cevabımı önceki sorunuza kabul edecek misiniz? Bu yeni soruyla size yardımcı olmamı teşvik edebilir. Şimdi ne yaptığınızı anlıyorum. –

cevap

-2

Turşu kullanın. Bu, bir python nesnesini başka bir programda (daha sonra TCP üzerinden aktarabilir veya neyiniz var ?, veriyi seri hale getirebilirsiniz) çıkarabileceğiniz bir akışa (bir dosya gibi) kaydetmenize izin verir.

http://docs.python.org/library/pickle.html

+0

Metin hariç * sıkıştırma *; Genel olarak, turşu yapısal ve tip bilgisi içeren bir * daha uzun * dizeyle sonuçlanır. –

+0

Sıkıştırma serileştirme değil –

10

Program 1:

T = 'blah blah blah blah' 
S = zlib.compress(T) 
with open("temp.zlib", "wb") as myfile: 
    myfile.write(S) 

Bu dosyada sıkıştırılmış dize böylece programın 2 sonradan almak ve bunu sıkıştırmasını temp.zlib denilen kaydeder.

Program 2:

with open("temp.zlib", "rb") as myfile: 
    S = myfile.read() 
T = zlib.decompress(S) 
+0

Evet, bu istediğim şeye çok yakın, ancak tam olarak ihtiyacım olan şey, üçüncü dosyanın kullanımı olmadan, yalnızca iki dosyanın yardımıyla gerçekleştirmektir. – Quixotic

+0

Hangi üçüncü dosya? Burada sadece bir dosya var. Uygulamalarınızı dosya olarak sayıyorsanız, emin olun, bu 3'üncü bir şeydir, ancak verileri diske serileştirmek istemezseniz, bize daha fazla girdi sağlamanız gerekir. sistem çalışır. –

+0

@Nick Bastin: http://stackoverflow.com/questions/4844907/text-compression-in-python/4844924#4844924, Lennart Regebro cevabına bakın, ne elde edemiyorum o biçimdeki o sıkıştırılmış değeri nasıl alıyor? . – Quixotic