Python 3.7

tarfile - tar संग्रह फ़ाइलों को पढ़ें और लिखें




python

tarfile - tar संग्रह फ़ाइलों को पढ़ें और लिखें

स्रोत कोड: Lib/tarfile.py

tarfile मॉड्यूल टार अभिलेखागार को पढ़ना और लिखना संभव बनाता है, जिसमें gzip, bz2 और lzma कम्प्रेशन का उपयोग करना शामिल है। shutil को पढ़ने या लिखने के लिए zipfile मॉड्यूल का उपयोग करें।

कुछ तथ्य और आंकड़े:

  • अगर संबंधित मॉड्यूल उपलब्ध हैं, तो gzip , bz2 और lzma संकुचित अभिलेखागार को पढ़ता और लिखता है।
  • POSIX.1-1988 (ustar) प्रारूप के लिए समर्थन पढ़ें / लिखें।
  • जीएनयू टार प्रारूप के लिए रीड / राइट सपोर्ट जिसमें longname और longlink एक्सटेंशन शामिल हैं, विरल एक्सटेंशन के सभी वेरिएंट के लिए रीड-ओनली सपोर्ट सहित स्पार्स फाइल्स की बहाली भी शामिल है।
  • POSIX.1-2001 (पैक्स) प्रारूप के लिए समर्थन पढ़ें / लिखें।
  • निर्देशिकाओं, नियमित फ़ाइलों, हार्डलिंक, प्रतीकात्मक लिंक, फीफो, चरित्र उपकरणों और ब्लॉक उपकरणों को संभालता है और टाइमस्टैम्प, एक्सेस अनुमतियां और स्वामी जैसी फ़ाइल जानकारी प्राप्त करने और पुनर्स्थापित करने में सक्षम है।

संस्करण 3.3 में परिवर्तित: lzma संपीड़न के लिए जोड़ा गया समर्थन।

tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)

TarFile नाम के लिए एक TarFile ऑब्जेक्ट TarFile TarFile ऑब्जेक्ट्स और अनुमति दी गई कीवर्ड तर्क पर विस्तृत जानकारी के लिए, TarFile ऑब्जेक्ट देखें।

मोड को 'filemode[:compression]' के रूप में एक स्ट्रिंग होना चाहिए, यह 'r' लिए डिफॉल्ट करता है। यहाँ मोड संयोजनों की एक पूरी सूची है:

मोड कार्य
'r' or 'r:*' पारदर्शी संपीड़न (अनुशंसित) के साथ पढ़ने के लिए खोलें।
'r:' संपीड़न के बिना विशेष रूप से पढ़ने के लिए खोलें।
'r:gz' गज़िप संपीड़न के साथ पढ़ने के लिए खोलें।
'r:bz2' Bzip2 संपीड़न के साथ पढ़ने के लिए खोलें।
'r:xz' Lzma संपीड़न के साथ पढ़ने के लिए खोलें।
'x' या 'x:' विशेष रूप से संपीड़न के बिना एक टारफाइल बनाएं। यदि यह पहले से मौजूद है तो FileExistsError अपवाद उठाएँ।
'x:gz' गज़िप कम्प्रेशन के साथ एक टारफाइल बनाएं। यदि यह पहले से मौजूद है तो FileExistsError अपवाद उठाएँ।
'x:bz2' Bzip2 कम्प्रेशन के साथ एक टारफाइल बनाएं। यदि यह पहले से मौजूद है तो FileExistsError अपवाद उठाएँ।
'x:xz' Lzma संपीड़न के साथ एक टारफाइल बनाएं। यदि यह पहले से मौजूद है तो FileExistsError अपवाद उठाएँ।
'a' or 'a:' कोई संपीड़न के साथ संलग्न करने के लिए खुला। यदि मौजूद नहीं है तो फ़ाइल बनाई जाती है।
'w' or 'w:' असम्बद्ध लेखन के लिए खुला।
'w:gz' Gzip संपीड़ित लेखन के लिए खोलें।
'w:bz2' Bzip2 संपीड़ित लेखन के लिए खोलें।
'w:xz' Lzma संपीड़ित लेखन के लिए खोलें।

ध्यान दें कि 'a:gz' , 'a:bz2' या 'a:xz' संभव नहीं है। यदि मोड पढ़ने के लिए एक निश्चित (संपीड़ित) फ़ाइल खोलने के लिए उपयुक्त नहीं है, तो ReadError को उठाया जाता है। इससे बचने के लिए मोड 'r' का इस्तेमाल करें। यदि कोई संपीड़न विधि समर्थित नहीं है, तो CompressionError को उठाया जाता है।

यदि फ़ाइलबॉज निर्दिष्ट किया जाता है, तो इसका उपयोग नाम के लिए बाइनरी मोड में खोले गए फ़ाइल ऑब्जेक्ट के विकल्प के रूप में किया जाता है। यह स्थिति 0 पर माना जाता है।

मोड 'w:gz' , 'r:gz' , 'w:bz2' , 'r:bz2' , 'x:gz' , 'x:bz2' , tarfile.open() कीवर्ड तर्क tarfile.open() स्वीकार करता है (डिफ़ॉल्ट) 9 ) फ़ाइल के संपीड़न स्तर को निर्दिष्ट करने के लिए।

विशेष प्रयोजनों के लिए, मोड के लिए एक दूसरा प्रारूप है : 'filemode|[compression]' tarfile.open() एक TarFile ऑब्जेक्ट TarFile जो अपने डेटा को ब्लॉकों की धारा के रूप में संसाधित करता है। फाइल पर कोई रैंडम डिमांड नहीं की जाएगी। यदि दिया गया है, तो फाइलोबेज कोई भी ऑब्जेक्ट हो सकता है जिसमें read() या write() विधि ( मोड के आधार पर) हो। bufsize 20 * 512 बाइट्स के लिए अवरोध और डिफॉल्ट को निर्दिष्ट करता है। उदा। sys.stdin , सॉकेट फ़ाइल ऑब्जेक्ट या टेप डिवाइस के संयोजन में इस संस्करण का उपयोग करें। हालांकि, इस तरह के एक TarFile ऑब्जेक्ट सीमित है कि यह यादृच्छिक अभिगम की अनुमति नहीं देता है, Examples देखें। वर्तमान में संभव मोड:

मोड कार्य
'r|*' पारदर्शी संपीड़न के साथ पढ़ने के लिए टार ब्लॉक की एक धारा खोलें।
'r|' पढ़ने के लिए असम्पीडित टार ब्लॉक की एक धारा खोलें।
'r|gz' पढ़ने के लिए एक gzip संपीड़ित स्ट्रीम खोलें।
'r|bz2' पढ़ने के लिए एक bzip2 संपीड़ित स्ट्रीम खोलें।
'r|xz' पढ़ने के लिए एक lzma संपीड़ित स्ट्रीम खोलें।
'w|' लिखने के लिए एक असम्पीडित स्ट्रीम खोलें।
'w|gz' लिखने के लिए एक gzip संपीड़ित स्ट्रीम खोलें।
'w|bz2' लिखने के लिए एक bzip2 संपीड़ित स्ट्रीम खोलें।
'w|xz' लिखने के लिए एक lzma संपीड़ित स्ट्रीम खोलें।

संस्करण 3.5 में बदला गया: 'x' (अनन्य निर्माण) मोड जोड़ा गया था।

संस्करण 3.6 में बदला गया: नाम पैरामीटर एक पथ जैसी वस्तु को स्वीकार करता है।

class tarfile.TarFile

टार अभिलेखागार पढ़ने और लिखने के लिए कक्षा। सीधे इस वर्ग का उपयोग न करें: इसके बजाय tarfile.open() उपयोग करें। TarFile ऑब्जेक्ट देखें।

tarfile.is_tarfile(name)

True लौटें यदि नाम एक टार आर्काइव फ़ाइल है, जिसे tarfile मॉड्यूल पढ़ सकता है।

tarfile मॉड्यूल निम्नलिखित अपवादों को परिभाषित करता है:

exception tarfile.TarError

सभी tarfile अपवादों के लिए बेस क्लास।

exception tarfile.ReadError

जब एक टार आर्काइव खोला जाता है तो उठाया जाता है, या तो tarfile मॉड्यूल द्वारा संभाला नहीं जा सकता है या किसी तरह अमान्य है।

exception tarfile.CompressionError

तब उठाया जाता है जब एक संपीड़न विधि समर्थित नहीं होती है या जब डेटा ठीक से डिकोड नहीं किया जा सकता है।

exception tarfile.StreamError

उन सीमाओं के लिए उठाया जाता है जो धारा-जैसे TarFile वस्तुओं के लिए विशिष्ट TarFile हैं।

exception tarfile.ExtractError

TarFile.extract() का उपयोग करते समय गैर-घातक त्रुटियों के लिए उठाया जाता है, लेकिन केवल अगर TarFile.errorlevel == 2

exception tarfile.HeaderError

TarInfo.frombuf() द्वारा उठाया गया है, अगर बफर यह अमान्य है।

निम्नलिखित स्थिरांक मॉड्यूल स्तर पर उपलब्ध हैं:

tarfile.ENCODING

डिफ़ॉल्ट चरित्र एन्कोडिंग: विंडोज पर 'utf-8' , अन्यथा sys.getfilesystemencoding() द्वारा लौटाया गया मान।

निम्न में से प्रत्येक स्थिरांक एक टार आर्काइव प्रारूप को परिभाषित करता है जिसे tarfile मॉड्यूल बनाने में सक्षम है। विवरण के लिए अनुभाग समर्थित टार प्रारूप देखें।

tarfile.USTAR_FORMAT

POSIX.1-1988 (ustar) प्रारूप।

tarfile.GNU_FORMAT

GNU टार प्रारूप।

tarfile.PAX_FORMAT

POSIX.1-2001 (पैक्स) प्रारूप।

tarfile.DEFAULT_FORMAT

अभिलेखागार बनाने के लिए डिफ़ॉल्ट प्रारूप। यह वर्तमान में GNU_FORMAT

यह भी देखें

Module zipfile
zipfile मानक मॉड्यूल का दस्तावेज़ीकरण।
shutil
मानक shutil मॉड्यूल द्वारा प्रदान की जाने वाली उच्च-स्तरीय संग्रह सुविधाओं का दस्तावेजीकरण।
जीएनयू टार मैनुअल, बेसिक टार फॉर्मेट
GNU टार एक्सटेंशन सहित टार आर्काइव फ़ाइलों के लिए प्रलेखन।

TarFile ऑब्जेक्ट

TarFile ऑब्जेक्ट टार आर्काइव को एक इंटरफ़ेस प्रदान करता है। टार आर्काइव ब्लॉक का एक क्रम है। एक संग्रह सदस्य (एक संग्रहीत फ़ाइल) एक हेडर ब्लॉक से बना होता है, जिसके बाद डेटा ब्लॉक होता है। किसी फ़ाइल को टार संग्रह में कई बार संग्रहीत करना संभव है। प्रत्येक संग्रह सदस्य एक TarInfo ऑब्जेक्ट द्वारा दर्शाया गया है, विवरण के लिए TarInfo ऑब्जेक्ट देखें।

एक TarFile ऑब्जेक्ट को एक बयान में एक संदर्भ प्रबंधक के रूप में इस्तेमाल किया जा सकता है। ब्लॉक पूरा होने पर यह अपने आप बंद हो जाएगा। कृपया ध्यान दें कि अपवाद की स्थिति में लेखन के लिए खोले गए एक संग्रह को अंतिम रूप नहीं दिया जाएगा; केवल आंतरिक रूप से उपयोग की जाने वाली फ़ाइल ऑब्जेक्ट बंद हो जाएगी। उपयोग के मामले के लिए Examples अनुभाग देखें।

संस्करण 3.2 में नया: संदर्भ प्रबंधन प्रोटोकॉल के लिए जोड़ा गया समर्थन।

class tarfile.TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors='surrogateescape', pax_headers=None, debug=0, errorlevel=0)

सभी निम्नलिखित तर्क वैकल्पिक हैं और उदाहरण के रूप में भी एक्सेस किए जा सकते हैं।

नाम संग्रह का पाथनेम है। नाम एक पथ जैसी वस्तु हो सकती है। यदि फ़ाइलबॉज दिया जाता है तो इसे छोड़ा जा सकता है। इस स्थिति में, फ़ाइल ऑब्जेक्ट का name विशेषता का उपयोग किया जाता है यदि यह मौजूद है।

मौजूदा संग्रह से पढ़ने के लिए मोड या तो 'r' है, 'a' मौजूदा फ़ाइल में डेटा को जोड़ने के लिए, 'w' मौजूदा फ़ाइल को ओवरराइट करने के लिए एक नई फ़ाइल बनाने के लिए, या 'x' केवल एक नई फ़ाइल बनाने के लिए करता है पहले से मौजूद नहीं है।

यदि फ़ाइलबॉज दिया जाता है, तो इसका उपयोग डेटा पढ़ने या लिखने के लिए किया जाता है। यदि यह निर्धारित किया जा सकता है, तो फ़ाइलबोज मोड द्वारा मोड को ओवरराइड किया जाता है। fileobj का उपयोग स्थिति 0 से किया जाएगा।

ध्यान दें

जब TarFile बंद हो जाता है, तो TarFile बंद नहीं TarFile है।

प्रारूप संग्रह प्रारूप को नियंत्रित करता है। यह स्थिरांक USTAR_FORMAT , GNU_FORMAT या PAX_FORMAT एक होना चाहिए जो कि मॉड्यूल स्तर पर परिभाषित हैं।

Tarinfo तर्क का उपयोग डिफ़ॉल्ट TarInfo वर्ग को एक अलग से बदलने के लिए किया जा सकता है।

यदि डीफ़ेरेंस False , तो संग्रह में प्रतीकात्मक और कठिन लिंक जोड़ें। यदि यह True , तो लक्ष्य फ़ाइलों की सामग्री को संग्रह में जोड़ें। इसका उन प्रणालियों पर कोई प्रभाव नहीं है जो प्रतीकात्मक लिंक का समर्थन नहीं करते हैं।

अगर ign_zeros False , तो संग्रह के अंत के रूप में एक खाली ब्लॉक का इलाज करें। यदि यह True , तो खाली (और अमान्य) ब्लॉकों को छोड़ें और अधिक से अधिक सदस्यों को प्राप्त करने का प्रयास करें। यह केवल संक्षिप्त या क्षतिग्रस्त अभिलेखों को पढ़ने के लिए उपयोगी है।

डिबग को 0 (नो डिबग मैसेज) से 3 (सभी डिबग मैसेज) तक सेट किया जा सकता है। संदेश sys.stderr को लिखे गए हैं।

यदि TarFile.extract() 0 , तो TarFile.extract() का उपयोग करते समय सभी त्रुटियों को अनदेखा कर दिया जाता है। डिबगिंग सक्षम होने के बावजूद, वे डिबग आउटपुट में त्रुटि संदेश के रूप में दिखाई देते हैं। यदि 1 , सभी घातक त्रुटियों को OSError अपवाद के रूप में उठाया जाता है। यदि 2 , सभी गैर-घातक त्रुटियों को TarError अपवाद के रूप में भी उठाया जाता है।

एन्कोडिंग और त्रुटियों की दलीलें वर्ण एन्कोडिंग को पढ़ने या संग्रह को लिखने और कैसे रूपांतरण त्रुटियों को संभालने के लिए उपयोग करने के लिए परिभाषित करती हैं। अधिकांश उपयोगकर्ताओं के लिए डिफ़ॉल्ट सेटिंग्स काम करेंगी। गहन जानकारी के लिए अनुभाग यूनिकोड समस्याएँ देखें।

Pax_headers तर्क स्ट्रिंग्स का एक वैकल्पिक शब्दकोष है जिसे पैक्स ग्लोबल हेडर के रूप में जोड़ा जाएगा यदि फॉर्मेट PAX_FORMAT

संस्करण 3.2 में बदला गया: त्रुटियों के तर्क के लिए डिफ़ॉल्ट के रूप में 'surrogateescape' उपयोग करें।

संस्करण 3.5 में बदला गया: 'x' (अनन्य निर्माण) मोड जोड़ा गया था।

संस्करण 3.6 में बदला गया: नाम पैरामीटर एक पथ जैसी वस्तु को स्वीकार करता है।

classmethod TarFile.open(...)

वैकल्पिक निर्माणकर्ता। tarfile.open() फ़ंक्शन वास्तव में इस classmethod का शॉर्टकट है।

TarFile.getmember(name)

सदस्य नाम के लिए एक TarInfo ऑब्जेक्ट TarInfo । यदि नाम संग्रह में नहीं पाया जा सकता है, तो KeyError को उठाया जाता है।

ध्यान दें

यदि कोई सदस्य संग्रह में एक से अधिक बार होता है, तो इसकी अंतिम घटना को सबसे अद्यतित संस्करण माना जाता है।

TarFile.getmembers()

TarInfo ऑब्जेक्ट्स की सूची के रूप में संग्रह के सदस्यों को TarInfo । सूची में संग्रह में सदस्यों के समान क्रम है।

TarFile.getnames()

सदस्यों को उनके नामों की सूची के रूप में लौटाएं। यह वैसा ही क्रम है जैसा कि सूची getmembers() द्वारा दिया गया है।

TarFile.list(verbose=True, *, members=None)

सामग्री की तालिका को sys.stdout प्रिंट करें। यदि क्रिया False , तो केवल सदस्यों के नाम ही छपे हैं। यदि यह True , तो ls -l के समान उत्पादन होता है। यदि वैकल्पिक सदस्य दिए गए हैं, तो यह getmembers() द्वारा getmembers() गई सूची का सबसेट होना चाहिए।

संस्करण 3.5 में परिवर्तित: सदस्य पैरामीटर जोड़ा गया।

TarFile.next()

TarInfo ऑब्जेक्ट के रूप में संग्रह के अगले सदस्य को TarInfo , जब TarFile पढ़ने के लिए खोला जाता है। अधिक उपलब्ध न होने पर वापस लौटें।

TarFile.extractall(path=".", members=None, *, numeric_owner=False)

संग्रह से सभी सदस्यों को वर्तमान कार्य निर्देशिका या निर्देशिका पथ पर निकालें। यदि वैकल्पिक सदस्य दिए गए हैं, तो यह getmembers() द्वारा getmembers() गई सूची का सबसेट होना चाहिए। सभी सदस्यों को निकाले जाने के बाद मालिक, संशोधन समय और अनुमतियाँ जैसी निर्देशिका जानकारी सेट की जाती है। यह दो समस्याओं के आसपास काम करने के लिए किया जाता है: एक निर्देशिका का संशोधन समय हर बार रीसेट होता है जब इसमें एक फ़ाइल बनाई जाती है। और, अगर किसी निर्देशिका की अनुमतियां लिखने की अनुमति नहीं देती हैं, तो इसके लिए फ़ाइलें निकालना विफल हो जाएगा।

यदि num_owner True , तो निकाले गए फ़ाइलों के लिए स्वामी / समूह को tarfile से स्वामी / समूह सेट करने के लिए उपयोग किया जाता है। अन्यथा, टारफाइल से नामित मूल्यों का उपयोग किया जाता है।

चेतावनी

पूर्व निरीक्षण के बिना अविश्वसनीय स्रोतों से अभिलेखागार कभी न निकालें। यह संभव है कि फाइलें पथ के बाहर बनाई गई हों, उदाहरण के लिए ऐसे सदस्य जिनके पास पूर्ण फ़ाइल नाम "/" या फ़ाइलनाम के साथ दो डॉट्स ".." "/" साथ शुरू होता है।

3.5 संस्करण में परिवर्तित: संख्यात्मक_owner पैरामीटर जोड़ा गया।

संस्करण 3.6 में बदला गया: पथ पैरामीटर एक पथ जैसी वस्तु को स्वीकार करता है।

TarFile.extract(member, path="", set_attrs=True, *, numeric_owner=False)

अपने पूर्ण नाम का उपयोग करके संग्रह से सदस्य को वर्तमान कार्य निर्देशिका में निकालें। इसकी फ़ाइल जानकारी यथासंभव सटीक रूप से निकाली गई है। सदस्य एक फ़ाइल नाम या एक TarInfo ऑब्जेक्ट हो सकता है। आप पथ का उपयोग करके एक अलग निर्देशिका निर्दिष्ट कर सकते हैं। पथ एक पथ जैसी वस्तु हो सकती है। फ़ाइल विशेषताएँ (स्वामी, माइम, मोड) तब तक सेट की जाती हैं जब तक कि set_attrs गलत न हो।

यदि num_owner True , तो निकाले गए फ़ाइलों के लिए स्वामी / समूह को tarfile से स्वामी / समूह सेट करने के लिए उपयोग किया जाता है। अन्यथा, टारफाइल से नामित मूल्यों का उपयोग किया जाता है।

ध्यान दें

TarFile.extract() विधि कई निष्कर्षण मुद्दों का ध्यान नहीं रखती है। ज्यादातर मामलों में आपको extractall() विधि का उपयोग करने पर विचार करना चाहिए।

चेतावनी

extractall() लिए चेतावनी देखें।

संस्करण 3.2 में परिवर्तित: set_attrs पैरामीटर जोड़ा गया।

3.5 संस्करण में परिवर्तित: संख्यात्मक_owner पैरामीटर जोड़ा गया।

संस्करण 3.6 में बदला गया: पथ पैरामीटर एक पथ जैसी वस्तु को स्वीकार करता है।

TarFile.extractfile(member)

फ़ाइल ऑब्जेक्ट के रूप में संग्रह से सदस्य निकालें। सदस्य एक फ़ाइल नाम या एक TarInfo ऑब्जेक्ट हो सकता है। यदि सदस्य एक नियमित फ़ाइल या लिंक है, तो एक io.BufferedReader ऑब्जेक्ट वापस किया जाता है। अन्यथा, None भी वापस None है।

संस्करण 3.3 में बदला गया: io.BufferedReader ऑब्जेक्ट io.BufferedReader

TarFile.add(name, arcname=None, recursive=True, *, filter=None)

संग्रह में फ़ाइल का नाम जोड़ें। नाम किसी भी प्रकार की फ़ाइल (निर्देशिका, फीफो, प्रतीकात्मक लिंक, आदि) हो सकता है। यदि दिया गया है, तो आर्कनाम संग्रह में फ़ाइल के लिए एक वैकल्पिक नाम निर्दिष्ट करता है। निर्देशिका डिफ़ॉल्ट रूप से पुनरावर्ती रूप से जोड़ी जाती हैं। इससे False पुनरावृत्ति स्थापित करने से बचा जा सकता है। पुनरावर्तन सॉर्ट किए गए क्रम में प्रविष्टियाँ जोड़ता है। यदि फ़िल्टर दिया जाता है, तो यह एक फ़ंक्शन होना चाहिए जो एक TarInfo ऑब्जेक्ट तर्क लेता है और परिवर्तित TarInfo ऑब्जेक्ट TarInfo है। यदि यह बदले में None TarInfo तो TarInfo ऑब्जेक्ट को संग्रह से बाहर रखा जाएगा। एक Examples लिए Examples देखें।

संस्करण 3.2 में परिवर्तित: फ़िल्टर पैरामीटर जोड़ा गया।

संस्करण 3.7 में बदला गया: पुनरावृत्ति क्रमबद्ध क्रम में प्रविष्टियाँ जोड़ता है।

TarFile.addfile(tarinfo, fileobj=None)

संग्रह में TarInfo ऑब्जेक्ट tarinfo जोड़ें। यदि फाइलबॉज दिया जाता है, तो यह एक द्विआधारी फ़ाइल होना चाहिए, और tarinfo.size बाइट्स इसे से पढ़ा जाता है और संग्रह में जोड़ा जाता है। आप सीधे TarInfo ऑब्जेक्ट बना सकते हैं, या gettarinfo() का उपयोग करके।

TarFile.gettarinfo(name=None, arcname=None, fileobj=None)

एक मौजूदा फ़ाइल पर os.stat() या समकक्ष के परिणाम से एक TarInfo ऑब्जेक्ट बनाएं। फ़ाइल को या तो नाम से जाना जाता है , या फ़ाइल डिस्क्रिप्टर के साथ फ़ाइल ऑब्जेक्ट फ़ाइलोब के रूप में निर्दिष्ट किया जाता है। नाम एक पथ जैसी वस्तु हो सकती है। अगर दिया जाता है, तो आर्कनाम फ़ाइल को संग्रह में फ़ाइल के लिए एक वैकल्पिक नाम निर्दिष्ट करता है, अन्यथा, नाम फ़ाइलबोज के name विशेषता या नाम तर्क से लिया जाता है। नाम एक पाठ स्ट्रिंग होना चाहिए।

addfile() का उपयोग करने से पहले आप कुछ TarInfo की विशेषताओं को संशोधित कर सकते हैं। यदि फ़ाइल ऑब्जेक्ट फ़ाइल की शुरुआत में तैनात एक साधारण फ़ाइल ऑब्जेक्ट नहीं है, तो size जैसे विशेषताओं को संशोधित करने की आवश्यकता हो सकती है। यह GzipFile जैसी वस्तुओं के लिए मामला है। name को संशोधित भी किया जा सकता है, जिस स्थिति में आर्कनाम एक डमी स्ट्रिंग हो सकता है।

संस्करण 3.6 में बदला गया: नाम पैरामीटर एक पथ जैसी वस्तु को स्वीकार करता है।

TarFile.close()

TarFile बंद करें। लेखन मोड में, दो परिष्करण शून्य ब्लॉक संग्रह में संलग्न हैं।

TarFile.pax_headers

एक शब्दकोश जिसमें पैक्स ग्लोबल हेडर के मुख्य-मूल्य जोड़े हैं।

TarInfo ऑब्जेक्ट्स

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

TarInfo ऑब्जेक्ट्स TarFile के तरीके getmember() , getmembers() और gettarinfo() द्वारा लौटाए जाते हैं।

class tarfile.TarInfo(name="")

एक TarInfo ऑब्जेक्ट बनाएँ।

classmethod TarInfo.frombuf(buf, encoding, errors)

स्ट्रिंग बफर buf से एक TarInfo ऑब्जेक्ट बनाएं और वापस करें।

बफ़र अमान्य है, तो HeaderError है।

classmethod TarInfo.fromtarfile(tarfile)

TarFile ऑब्जेक्ट tarfile से अगला सदस्य पढ़ें और इसे TarInfo ऑब्जेक्ट के रूप में TarInfo

TarInfo.tobuf(format=DEFAULT_FORMAT, encoding=ENCODING, errors='surrogateescape')

TarInfo ऑब्जेक्ट से एक स्ट्रिंग बफ़र बनाएँ। तर्कों पर जानकारी के लिए, TarFile वर्ग का निर्माता देखें।

संस्करण 3.2 में बदला गया: त्रुटियों के तर्क के लिए डिफ़ॉल्ट के रूप में 'surrogateescape' उपयोग करें।

TarInfo ऑब्जेक्ट में निम्न सार्वजनिक डेटा विशेषताएँ होती हैं:

TarInfo.name

संग्रह सदस्य का नाम।

TarInfo.size

बाइट्स में आकार।

TarInfo.mtime

अंतिम संशोधन का समय।

TarInfo.mode

अनुमति बिट्स।

TarInfo.type

फाइल का प्रकार। प्रकार आमतौर पर इन स्थिरांक में से एक होता है: REGTYPE , AREGTYPE , LNKTYPE , SYMTYPE , DIRTYPE , FIFOTYPE , CONTTYPE , CHRTYPE , BLKTYPE , GNUTYPE_SPARSE TarInfo ऑब्जेक्ट के प्रकार को अधिक आसानी से निर्धारित करने के लिए, नीचे दिए गए is*() विधियों का उपयोग करें।

TarInfo.linkname

लक्ष्य फ़ाइल नाम का नाम, जो केवल LNKTYPE और SYMTYPE TarInfo ऑब्जेक्ट्स में मौजूद है।

TarInfo.uid

उपयोगकर्ता का उपयोगकर्ता आईडी जिसने मूल रूप से इस सदस्य को संग्रहीत किया है।

TarInfo.gid

उपयोगकर्ता का समूह आईडी जिसने मूल रूप से इस सदस्य को संग्रहीत किया है।

TarInfo.uname

उपयोगकर्ता नाम।

TarInfo.gname

समूह का नाम।

TarInfo.pax_headers

एक शब्दकोश जिसमें एक संबद्ध पैक्स हैडर के प्रमुख-मूल्य जोड़े हैं।

एक TarInfo ऑब्जेक्ट भी कुछ सुविधाजनक क्वेरी तरीके प्रदान करता है:

TarInfo.isfile()

यदि Tarinfo ऑब्जेक्ट एक नियमित फ़ाइल है तो True लौटें।

TarInfo.isreg()

isfile() समान।

TarInfo.isdir()

यह एक निर्देशिका है तो True लौटें।

TarInfo.issym()

अगर यह एक प्रतीकात्मक कड़ी है तो True लौटें।

TarInfo.islnk()

यदि यह एक कठिन लिंक है तो True लौटें।

TarInfo.ischr()

अगर यह एक कैरेक्टर डिवाइस है तो True लौटें।

TarInfo.isblk()

यदि यह एक ब्लॉक डिवाइस है, तो True लौटें।

TarInfo.isfifo()

अगर यह एक फीफो है तो True लौटें।

TarInfo.isdev()

यदि यह वर्ण डिवाइस, ब्लॉक डिवाइस या FIFO में से एक है तो True लौटें।

कमांड लाइन इंटरफेस

संस्करण 3.4 में नया।

tarfile मॉड्यूल टार अभिलेखागार के साथ बातचीत करने के लिए एक सरल कमांड-लाइन इंटरफ़ेस प्रदान करता है।

यदि आप एक नया टार आर्काइव बनाना चाहते हैं, तो -c विकल्प के बाद उसका नाम निर्दिष्ट करें और फिर शामिल होने वाले फ़ाइलनाम (नामों) को सूचीबद्ध करें:

$ python -m tarfile -c monty.tar  spam.txt eggs.txt

एक निर्देशिका पास करना भी स्वीकार्य है:

$ python -m tarfile -c monty.tar life-of-brian_1979/

यदि आप वर्तमान निर्देशिका में एक टार संग्रह को निकालना चाहते हैं, तो -e विकल्प का उपयोग करें:

$ python -m tarfile -e monty.tar

आप निर्देशिका के नाम को पारित करके एक अलग संग्रह में एक टार संग्रह भी निकाल सकते हैं:

$ python -m tarfile -e monty.tar  other-dir/

टार संग्रह में फ़ाइलों की सूची के लिए, -l विकल्प का उपयोग करें:

$ python -m tarfile -l monty.tar

कमांड-लाइन विकल्प

-l <tarfile>
--list <tarfile>

फाइलों को तारकोल में सूचीबद्ध करें।

-c <tarfile> <source1> ... <sourceN>
--create <tarfile> <source1> ... <sourceN>

स्रोत फ़ाइलों से टैरिफाइल बनाएँ।

-e <tarfile> [<output_dir>]
--extract <tarfile> [<output_dir>]

यदि आउटपुट_dir निर्दिष्ट नहीं है, तो वर्तमान निर्देशिका में टारफाइल निकालें।

-t <tarfile>
--test <tarfile>

परीक्षण करें कि टारफाइल वैध है या नहीं।

-v, --verbose

वाचाल उत्पादन।

उदाहरण

वर्तमान कार्य निर्देशिका में संपूर्ण टार आर्काइव कैसे निकालें:

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()

एक सूची के बजाय एक जनरेटर फ़ंक्शन का उपयोग करके extractall() साथ एक टार संग्रह का सबसेट निकालने के लिए कैसे:

import os
import tarfile

def py_files(members):
    for tarinfo in members:
        if os.path.splitext(tarinfo.name)[1] == ".py":
            yield tarinfo

tar = tarfile.open("sample.tar.gz")
tar.extractall(members=py_files(tar))
tar.close()

फ़ाइल नाम की सूची से एक असम्पीडित टार आर्काइव कैसे बनाएँ:

import tarfile
tar = tarfile.open("sample.tar", "w")
for name in ["foo", "bar", "quux"]:
    tar.add(name)
tar.close()

कथन के with प्रयोग करने वाला एक ही उदाहरण:

import tarfile
with tarfile.open("sample.tar", "w") as tar:
    for name in ["foo", "bar", "quux"]:
        tar.add(name)

कैसे एक gzip संकुचित टार संग्रह को पढ़ने और कुछ सदस्य जानकारी प्रदर्शित करने के लिए:

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
    print(tarinfo.name, "is", tarinfo.size, "bytes in size and is", end="")
    if tarinfo.isreg():
        print("a regular file.")
    elif tarinfo.isdir():
        print("a directory.")
    else:
        print("something else.")
tar.close()

कैसे एक संग्रह बनाने के लिए और TarFile.add() में फ़िल्टर पैरामीटर का उपयोग करके उपयोगकर्ता जानकारी रीसेट करें:

import tarfile
def reset(tarinfo):
    tarinfo.uid = tarinfo.gid = 0
    tarinfo.uname = tarinfo.gname = "root"
    return tarinfo
tar = tarfile.open("sample.tar.gz", "w:gz")
tar.add("foo", filter=reset)
tar.close()

टार स्वरूपों का समर्थन किया

तीन टार प्रारूप हैं जिन्हें tarfile मॉड्यूल के साथ बनाया जा सकता है:

  • POSIX.1-1988 ustar प्रारूप ( USTAR_FORMAT )। यह सर्वश्रेष्ठ 256 वर्णों की लंबाई तक फ़ाइलनामों का समर्थन करता है और 100 वर्णों तक के नाम जोड़ता है। अधिकतम फ़ाइल आकार 8 GiB है। यह एक पुराना और सीमित लेकिन व्यापक रूप से समर्थित प्रारूप है।
  • GNU टार प्रारूप ( GNU_FORMAT )। यह लंबे फ़ाइल नाम और लिंकनाम, 8 GiB से बड़ी फ़ाइलों और विरल फ़ाइलों का समर्थन करता है। यह GNU / Linux सिस्टम पर वास्तविक तथ्य है। tarfile पूरी तरह से लंबे नामों के लिए GNU टार एक्सटेंशन का समर्थन करता है, विरल फ़ाइल समर्थन केवल-पढ़ने के लिए है।
  • POSIX.1-2001 पैक्स प्रारूप ( PAX_FORMAT )। यह लगभग कोई सीमा नहीं के साथ सबसे लचीला प्रारूप है। यह लंबे फाइलनाम और लिंकनाम, बड़ी फाइल और स्टोर पाथनाम को पोर्टेबल तरीके से सपोर्ट करता है। हालांकि, सभी टार कार्यान्वयन आज पैक्स अभिलेखागार को ठीक से संभालने में सक्षम नहीं हैं।

    पैक्स प्रारूप मौजूदा ustar प्रारूप का विस्तार है। यह जानकारी के लिए अतिरिक्त हेडर का उपयोग करता है जिसे अन्यथा संग्रहीत नहीं किया जा सकता है। पैक्स हेडर के दो फ्लेवर हैं: विस्तारित हेडर केवल बाद की फ़ाइल हेडर को प्रभावित करते हैं, वैश्विक हेडर पूर्ण संग्रह के लिए मान्य हैं और सभी निम्न फ़ाइलों को प्रभावित करते हैं। पोर्टेबिलिटी कारणों से एक पैक्स हैडर का सारा डेटा यूटीएफ -8 में एनकोडेड है।

टार प्रारूप के कुछ और रूप हैं जिन्हें पढ़ा जा सकता है, लेकिन बनाया नहीं गया:

  • प्राचीन V7 प्रारूप। यह यूनिक्स सातवें संस्करण से पहला टार प्रारूप है, जिसमें केवल नियमित फाइलें और निर्देशिका संग्रहीत की जाती हैं। नाम 100 वर्णों से अधिक नहीं होने चाहिए, कोई उपयोगकर्ता / समूह नाम जानकारी नहीं है। कुछ अभिलेखागार में गैर-ASCII वर्ण वाले फ़ील्ड के मामले में हेडरक्यूलर चेकसम हैं।
  • SunOS टार विस्तारित प्रारूप। यह प्रारूप POSIX.1-2001 पैक्स प्रारूप का एक प्रकार है, लेकिन संगत नहीं है।

यूनिकोड मुद्दे

टार प्रारूप की मूल रूप से फाइल सिस्टम जानकारी के संरक्षण पर मुख्य ध्यान देने के साथ टेप ड्राइव पर बैकअप बनाने की कल्पना की गई थी। आजकल टार अभिलेखागार का उपयोग आमतौर पर फ़ाइल वितरण और नेटवर्क पर अभिलेखागार के आदान-प्रदान के लिए किया जाता है। मूल प्रारूप (जो अन्य सभी स्वरूपों का आधार है) की एक समस्या यह है कि विभिन्न चरित्र एन्कोडिंग का समर्थन करने की कोई अवधारणा नहीं है। उदाहरण के लिए, यदि UTF-8 सिस्टम पर बनाया गया एक साधारण टार आर्काइव लैटिन- 1 सिस्टम पर सही ढंग से नहीं पढ़ा जा सकता है यदि इसमें गैर- ASCII अक्षर हैं। टेक्स्ट मेटाडेटा (जैसे फ़ाइल नाम, लिंकनाम, उपयोगकर्ता / समूह नाम) क्षतिग्रस्त दिखाई देंगे। दुर्भाग्य से, एक संग्रह के एन्कोडिंग को स्वचालित करने का कोई तरीका नहीं है। पैक्स प्रारूप को इस समस्या को हल करने के लिए डिज़ाइन किया गया था। यह गैर-ASCII मेटाडेटा को सार्वभौमिक वर्ण एन्कोडिंग UTF-8 का उपयोग करके संग्रहीत करता है।

TarFile में वर्ण रूपांतरण के विवरण को TarFile वर्ग के एन्कोडिंग और त्रुटियों वाले कीवर्ड तर्कों द्वारा नियंत्रित किया जाता है।

एन्कोडिंग संग्रह में मेटाडेटा के लिए उपयोग करने के लिए वर्ण एन्कोडिंग को परिभाषित करता है। डिफ़ॉल्ट मान sys.getfilesystemencoding() या 'ascii' रूप में है। संग्रह पढ़ने या लिखे जाने के आधार पर, मेटाडेटा को डीकोड किया जाना चाहिए या एन्कोड किया जाना चाहिए। यदि एन्कोडिंग उचित रूप से सेट नहीं किया गया है, तो यह रूपांतरण विफल हो सकता है।

त्रुटियों का तर्क यह परिभाषित करता है कि उन वर्णों को कैसे व्यवहार किया जाता है जिन्हें परिवर्तित नहीं किया जा सकता है। संभावित मान अनुभाग त्रुटि हैंडलर में सूचीबद्ध हैं। डिफ़ॉल्ट योजना 'surrogateescape' जिसे पायथन अपने फाइल सिस्टम कॉल के लिए भी उपयोग करता है, फ़ाइल नाम, कमांड लाइन तर्क और पर्यावरण चर देखें

PAX_FORMAT अभिलेखागार के मामले में, एन्कोडिंग की आवश्यकता आमतौर पर नहीं होती है क्योंकि सभी मेटाडेटा को UTF-8 का उपयोग करके संग्रहीत किया जाता है। एन्कोडिंग का उपयोग केवल दुर्लभ मामलों में किया जाता है जब बाइनरी पैक्स हेडर को डिकोड किया जाता है या जब सरोगेट पात्रों के साथ तार संग्रहीत होते हैं।