मैं एक स्मृति और डिस्क सीमित वातावरण जहां मैं (xmlrpc बाइनरी स्थानांतरण से अधिक) स्ट्रिंग आधारित मात्रा में जिस एक gzip फ़ाइल की सामग्री को संपीड़ित करने की जरूरत है। हालांकि, gzip.decompress() या zlib.decompressobj()/decompress() gzip शीर्षलेख पर दोनों बार्फ़ का उपयोग कर। मैंने gzip शीर्षलेख (दस्तावेज here) को ऑफ़सेट करने का प्रयास किया है, लेकिन अभी भी बार्फ़ से बचने में कामयाब नहीं रहा है। Gzip लाइब्रेरी केवल फाइलों से डिकंप्रेस करने का समर्थन करती है।अजगर decompressing gzip हिस्सा द्वारा हिस्सा
निम्नलिखित स्निपेट मैं करना चाहते हैं क्या की एक सरल उदाहरण देता है (वास्तविक जीवन में सिवाय बफर, xmlrpc से भरा जाएगा बल्कि एक स्थानीय फ़ाइल से पढ़ने की तुलना में): के रूप में
#! /usr/bin/env python
import zlib
CHUNKSIZE=1000
d = zlib.decompressobj()
f=open('23046-8.txt.gz','rb')
buffer=f.read(CHUNKSIZE)
while buffer:
outstr = d.decompress(buffer)
print(outstr)
buffer=f.read(CHUNKSIZE)
outstr = d.flush()
print(outstr)
f.close()
दुर्भाग्य से, मैंने कहा, इस के साथ barfs:
Traceback (most recent call last):
File "./test.py", line 13, in <module>
outstr = d.decompress(buffer)
zlib.error: Error -3 while decompressing: incorrect header check
सैद्धांतिक रूप से, मैं एक StringIO में मेरी xmlrpc-sourced डेटा फ़ीड सकता है और उसके बाद का उपयोग करें कि gzip.GzipFile() के लिए एक fileobj के रूप में, हालांकि, वास्तविक जीवन में, मैं ' स्मृति में पूरी फ़ाइल सामग्री को साथ ही टी में रखने के लिए मेमोरी उपलब्ध नहीं है उन्होंने डेटा को डिकंप्रेस किया। मुझे वास्तव में इसे खंड-दर-खंड को संसाधित करने की आवश्यकता है।
पतन-बैक मेरे xmlrpc-sourced डेटा को gzip से plain zibib तक संपीड़ित करना होगा, लेकिन इससे अन्य उप-प्रणालियों पर असर पड़ता है, यदि संभव हो तो मैं इससे बचना पसंद करूंगा।
कोई विचार?
कि यह पूरी तरह से किया था। धन्यवाद। (अब, क्यों नहीं अजगर डॉक्स में इस संकेत है?) – user291294
zlib zlib की ग संस्करण चारों ओर सिर्फ एक आवरण है। यह बिल्कुल अच्छी तरह से प्रलेखित नहीं है। आपको याद है, 16 + zlib.MAX_WBITS को सी संस्करण को दस्तावेज नहीं किया गया है, और यह पहली बार नहीं है जब मैंने एक अनियंत्रित zlib सुविधा देखी है। – wisty
निश्चित रूप से दस्तावेज होने की आवश्यकता है! – Ross