2013-04-22 6 views
10

वहाँ एक काफ़ी तेजी से अजगर 2.7.4 zipfile मॉड्यूल (ZIP_DEFLATED साथ) एक एकल ज़िप फ़ाइल में फ़ाइलों की एक बड़ी संख्या ज़िप करने के लिए करने के लिए वैकल्पिक है? मैंने czipfile https://pypi.python.org/pypi/czipfile/1.0.0 पर एक नज़र डाली थी, लेकिन यह तेजी से डिक्रिप्टिंग (संपीड़न नहीं) पर केंद्रित है।पायथन के ज़िपफाइल मॉड्यूल के लिए तेज़ विकल्प?

मुझे नियमित रूप से बड़ी संख्या में छवि फ़ाइलों (~exr और .tiff फ़ाइलों के संयोजन की ~ 12,000 फ़ाइलें) को संसाधित करना है, प्रत्येक फ़ाइल के साथ ~ 1 एमबी - 6 एमबी आकार (और ~ 9 जीबी सभी फाइलों के बीच)) शिपमेंट के लिए एक ज़िप फ़ाइल में। इस ज़िप में प्रक्रिया करने के लिए ~ 9 0 मिनट लगते हैं (विंडोज 7 64 बिट पर चल रहे हैं)।

यदि कोई अलग पाइथन मॉड्यूल (या वैकल्पिक रूप से एक सी/सी ++ लाइब्रेरी या यहां तक ​​कि एक स्टैंडअलोन टूल) की सिफारिश कर सकता है जो ज़िप्फ़ाइल मॉड्यूल की तुलना में कम समय में एकल .zip फ़ाइल में बड़ी संख्या में फ़ाइलों को संपीड़ित करने में सक्षम होगा , इसकी सराहना की जाएगी (~ 5-10% तेज (या अधिक) के करीब कुछ भी बहुत उपयोगी होगा)।

+2

सबसे खराब मामला है, तो आप हमेशा खोल फोन और अजगर – Patashu

+1

से 7Zip छवि फ़ाइलों को आप पहले से ही कर रहे हैं ज़िप करने उनके संबंधित फ़ाइल स्वरूपों के संपीड़न संस्करणों का उपयोग करते हैं की तरह कुछ पर अमल कर सकते हैं? यदि ऐसा है, तो आप ज़िप संसाधन के बजाय ZIP_DEFLATED का उपयोग करके उन्हें फिर से संपीड़ित करने की कोशिश कर रहे महत्वपूर्ण संसाधन समय को बर्बाद कर रहे हैं। इसके अलावा, दोनों अजगर 2 और 3 के लिए डॉक्स का कहना है कि [ 'zipfile'] (http://docs.python.org/2/library/zipfile.html#module-zipfile) मॉड्यूल केवल में एन्क्रिप्टेड फ़ाइलों का डिक्रिप्शन का समर्थन करता है ज़िप अभिलेखागार, उन्हें नहीं बनाते - तो आप यह कैसे कर रहे हैं? – martineau

+0

@ पट्टाशू सुझाव के लिए धन्यवाद, मैं इसे आज़माकर प्रदर्शन का परीक्षण करूंगा। फ़ाइलों को .zip फ़ाइलों की आवश्यकता है, अन्यथा मैं अन्य पैकिंग प्रारूपों के साथ अधिक प्रयोग करेंगे। –

उत्तर

4

Patashu उल्लेख के रूप में, 7-ज़िप करने के लिए आउटसोर्सिंग के लिए सबसे अच्छा विचार हो सकता है।

यहाँ पाने के लिए कुछ नमूना कोड आप शुरू कर दिया है:

import os 
import subprocess 

path_7zip = r"C:\Program Files\7-Zip\7z.exe" 
path_working = r"C:\temp" 
outfile_name = "compressed.zip" 
os.chdir(path_working) 

ret = subprocess.check_output([path_7zip, "a", "-tzip", outfile_name, "*.txt", "*.py", "-pSECRET"]) 

मार्टिन्यू के रूप में आप संपीड़न तरीकों के साथ प्रयोग कर सकते हैं उल्लेख किया है। This page कमांड लाइन पैरामीटर को बदलने के तरीके पर कुछ उदाहरण देता है।

+1

हर किसी की मदद के लिए धन्यवाद। 7-ज़िप (.exr फ़ाइलों के 1 जीबी सबसेट पर आउटसोर्सिंग) ने ज़िपफाइल संपीड़न की तुलना में संपीड़न समय को ~ 52% तक बढ़ा दिया जो वास्तव में बहुत अच्छा है। मैं अभी भी असंपीड़ित संस्करण पर कुछ परीक्षण चला रहा हूं कि @ मार्टिनौ ने 7zip की tweaked सेटिंग्स की तुलना में सुझाव दिया है, लेकिन ऐसा लगता है कि 7zip समाधान निश्चित रूप से एक सुधार होगा। –

+1

@ michaelhubbard.ca: 7-ज़िप का उपयोग करना एक अच्छा विकल्प है, यह इस तरह की चीज़ के लिए एक उत्कृष्ट उपयोगिता है। ध्यान दें कि '7za.exe' नामक एक कमांड लाइन केवल संस्करण है जो केवल 574 केबी है और आपको शायद इसकी आवश्यकता है। इसके अलावा, कृपया कहीं भी एक टिप्पणी जोड़ें और हमें बताएं कि बनाम संपीड़न बनाने के लिए केवल इतना अंतर क्या है। – martineau

+0

@ michaelhubbard.ca: मैं यह उल्लेख करना भूल गया कि 7-ज़िप में भी बहुत अच्छा एन्क्रिप्शन विकल्प हैं, क्योंकि आपने कहा था कि आप उस विकल्प में रुचि रखते थे। – martineau

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