2011-12-14 16 views
63

मैं पायथन में एक स्ट्रिंग को संकुचित कैसे करूं?मैं पायथन में एक स्ट्रिंग को संकुचित कैसे करूं?

gzip.GzipFile मौजूद है, लेकिन यह फाइल ऑब्जेक्ट्स के लिए है - सादे तारों के बारे में क्या?

+7

पहले परिणाम यह हुआ कि दस्तावेज केवल उल्लेख है 'StringIO' लेकिन करता है वास्तव में यह नहीं समझाओ कि यह कैसे करें। तो यहां सवाल पूछना पूरी तरह मान्य है, आईएमएचओ। उनसे पूछने और उन्हें बताने से पहले कुछ और परीक्षण अच्छे थे, हालांकि। – KevinDTimm

+0

@KevinDTimm के लिए – Alfe

+0

@Alfe - प्रश्न 4 साल पहले मेरे टिप्पणी के समान कारण के लिए बंद कर दिया गया था - ओपी ने पहले खोज करने का कोई प्रयास नहीं किया। – KevinDTimm

उत्तर

2

http://docs.python.org/library/archiving.html से एक उपयुक्त मॉड्यूल चुनें - या तो अपनी सटीक आवश्यकताओं के आधार पर gzip या zlib।

compressed_value = s.encode("zlib") 

तो फिर तुम इसके साथ संपीड़न हटाने:

+1

मुझे लगता है कि zlib में संपीड़न के कई स्तर हैं। जीजीआईपी का स्तर क्या है? – bellpeace

+2

बेलपेस, क्या आपने gzip के लिए प्रलेखन के लिंक का पालन किया था? "संपीड़न तर्क 1 से 9 तक संपीड़न के स्तर को नियंत्रित करने वाला एक पूर्णांक है; 1 सबसे तेज़ है और कम से कम संपीड़न पैदा करता है, और 9 सबसे धीमा है और सबसे संपीड़न पैदा करता है। डिफ़ॉल्ट [रेडियक्टेड]" है। मैं आपको वास्तविक मूल्य की जांच करने दूंगा। :) –

+0

डिफ़ॉल्ट 9 है, सबसे धीमा। –

52

सबसे आसान तरीका है zlibencoding है

plain_string_again = compressed_value.decode("zlib") 
+3

स्ट्रिंग है? – dcousens

+1

@ Daniel: हां, 's' एक पायथन 2.x वस्तु प्रकार 'str' है। –

+2

[मानक एनकोडिंग] देखें (http://docs.python.org/2/library/codecs.html#standard-encodings) जहां उसे वह मिला (__ "कोडेक्स" __ तक नीचे स्क्रॉल करें)। यह भी उपलब्ध है: 's.encode ('rot13')', 's.encode ('base64')' – bobobobo

123

आप हेडर के साथ आदि एक पूरा gzip संगत बाइनरी स्ट्रिंग निर्माण करने के लिए, चाहते हैं, आप gzip.GzipFile का उपयोग StringIO:

import StringIO 
import gzip 
out = StringIO.StringIO() 
with gzip.GzipFile(fileobj=out, mode="w") as f: 
    f.write("This is mike number one, isn't this a lot of fun?") 
out.getvalue() 

# returns '\x1f\x8b\x08\x00\xbd\xbe\xe8N\x02\xff\x0b\xc9\xc8,V\x00\xa2\xdc\xcc\xecT\x85\xbc\xd2\xdc\xa4\xd4"\x85\xfc\xbcT\x1d\xa0X\x9ez\x89B\tH:Q!\'\xbfD!?M!\xad4\xcf\x1e\x00w\xd4\xea\xf41\x00\x00\x00' 
के साथ कर सकते हैं
+4

लाइफ सेवर। बस कमाल। मुझे पता है कि यह पुराना है, लेकिन धन्यवाद! –

+15

यह स्वीकार्य उत्तर होना चाहिए। – ForeverWintr

+2

इस के विपरीत है: 'डीईएफ़ gunzip_text (पाठ): infile = StringIO.StringIO() infile.write (पाठ) gzip.GzipFile साथ (fileobj = infile, मोड =" आर ") च के रूप में: च .rewind() f.read() वापसी बाहर .getvalue() – fastmultiplication

-5
s = "a long string of characters" 

g = gzip.open('gzipfilename.gz', 'w', 5) # ('filename', 'read/write mode', compression level) 
g.write(s) 
g.close() 
'अजगर gzip' http://docs.python.org/library/gzip.html (शायद तुम सिर्फ एक छोटे से कोशिश कर सकते?)
+3

मुझे लगता है कि यह प्रश्न प्रक्रिया में डिस्क पर लिखने के बिना स्मृति में एक स्ट्रिंग को संपीड़ित करने के बारे में था। अन्यथा आपका जवाब पूरी तरह से सही है। – Alfe

संबंधित मुद्दे