2011-01-30 5 views
15

मैं टेक्स्ट संपीड़न के लिए ज़्लिब का उपयोग करने की कोशिश कर रहा हूं।टेक्स्ट को कैसे कंप्रेस करें?

उदाहरण के लिए मैं एक पाठ T='blah blah blah blah' मैं इस मैं उपयोग कर रहा हूँ S=zlib.compress(T) अब मैं क्या चाहते S की ASCII फार्म प्राप्त करने के लिए इतना है कि मैं इस T को संपीड़ित कर सकते हैं के लिए लेकिन एक अलग कार्यक्रम में यह सेक करने की जरूरत है। धन्यवाद,

संपादित करें:

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 

जो देता है::

eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU= 

अब मैं एक अलग कार्यक्रम के लिए इस कोड को कॉपी कर सकते मुझे लगता है कि मैं इसे यहाँ हल करने के लिए एक विधि मिल तरीका है मूल कार्यक्रम वापस पाने के लिए:

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

Pl आसानी से सुझाव दें कि क्या आप किसी भी अन्य संपीड़न विधि से अवगत हैं जो बेहतर परिणाम देगा जबकि वही तरीके से संगत होगा।

+0

उपयोग zlib एस संपीड़न हटाने के लिए? – arthurprs

+0

क्या आपको अन्य प्रोग्राम में [zlib.decompress()] (http://docs.python.org/library/zlib.html#zlib.decompress) का उपयोग करने से रोकता है? –

+0

क्या आप अपने पिछले प्रश्न का उत्तर स्वीकार कर रहे हैं? इससे मुझे इस नए प्रश्न के साथ आपकी मदद करने के लिए प्रोत्साहित किया जा सकता है। अब मैं समझता हूं कि आप क्या प्राप्त कर रहे हैं। –

उत्तर

-2

अचार का उपयोग करें। यह आपको एक पाइथन ऑब्जेक्ट को स्ट्रीम (जैसे फ़ाइल) में सहेजने की अनुमति देता है, जिसे आप अपने अन्य प्रोग्राम में अनपिक कर सकते हैं (आप टीसीपी पर भी स्ट्रीम कर सकते हैं या आपके पास क्या है; अचार डेटा को क्रमबद्ध करता है)।

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

+0

छोड़कर वह पाठ * संपीड़न * चाहता है; आम तौर पर, अचार * एक * लंबी * स्ट्रिंग में परिणाम होता है जिसमें संरचनात्मक और प्रकार की जानकारी शामिल होती है। –

+0

संपीड़न serialization नहीं है –

10

कार्यक्रम 1:

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

यह एक फ़ाइल में संपीड़ित स्ट्रिंग temp.zlib बुलाया सहेजता है ताकि कार्यक्रम 2 बाद में निकालते हैं और यह संपीड़न हटाने कर सकते हैं।

कार्यक्रम 2:

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

हां, यह मेरी इच्छा के बहुत करीब है, लेकिन मुझे इसकी आवश्यकता है कि मुझे केवल दो फाइलों की मदद से तीसरे फ़ाइल के उपयोग के बिना किया जाए। – Quixotic

+0

क्या तीसरी फाइल? यहां केवल एक फ़ाइल है। यदि आप फ़ाइलों के रूप में अपने अनुप्रयोगों की गणना कर रहे हैं, तो सुनिश्चित करें कि यह एक तीसरी चीज है, लेकिन यदि आप डेटा को डिस्क पर क्रमबद्ध नहीं करना चाहते हैं तो आपको हमें बहुत अधिक इनपुट प्रदान करना होगा कि कैसे प्रणाली काम करता है। –

+0

@ निक बास्टिन: http://stackoverflow.com/questions/4844907/text-compression-in-python/4844924#4844924, लेनार्ट रीगेब्रो का उत्तर दें, मुझे क्या नहीं मिल रहा है कि उसे उस फ़ॉर्म में संपीड़ित मूल्य कैसे मिला । – Quixotic