कॉपी करने की खास प्रक्रिया, Python Utilities सेक्शन में मौजूद फ़ाइल सिस्टम और एक्सटर्नल कमांड मटीरियल के हिसाब से होती है. यह एक्सरसाइज़ "कॉपीस्पेशल" में है डायरेक्ट्री को google-python-exercises में स्टोर किया गया है (अगर आपने पहले से ऐसा नहीं किया है, तो google-python-exercises.zip डाउनलोड करें, ज़्यादा जानकारी के लिए सेट अप देखें). Copyspecial.py में अपना कोड जोड़ें.
Copy Special.py प्रोग्राम एक या एक से ज़्यादा डायरेक्ट्री को अपने आर्ग्युमेंट के तौर पर इस्तेमाल करता है. हम कहेंगे कि एक "विशेष" फ़ाइल वह है जहां नाम में कहीं __w__ पैटर्न होता है, जहां w एक या एक से ज़्यादा शब्द वर्ण होते हैं. दिए गए Main() में, कमांड लाइन आर्ग्युमेंट को पार्स करने के लिए कोड शामिल होता है. हालांकि, बाकी का काम आपको करना होता है. नीचे दी गई सुविधाओं को लागू करने के लिए, फ़ंक्शन लिखें और अपने फ़ंक्शन को कॉल करने के लिए Main() को बदलें.
आपके समाधान के लिए सुझाए गए फ़ंक्शन(नीचे दी गई जानकारी देखें):
- get_special_paths(dish) -- दी गई डायरेक्ट्री में मौजूद खास फ़ाइलों के ऐब्सलूट पाथ की सूची दिखाता है
- Copy_to(paths, dr) को पाथ की एक सूची दी गई है, तो उन फ़ाइलों को दी गई डायरेक्ट्री में कॉपी करें
- ZIP_to(paths, zippath) पर पाथ की एक सूची दी गई हो, उन फ़ाइलों को दी गई zipfile में ज़िप कर दें
पार्ट A (फ़ाइल पाथ में बदलाव करना)
सभी डायरेक्ट्री में, खास फ़ाइलों के ऐब्सलूट पाथ की सूची इकट्ठा करें. सबसे आसान मामले में, बस उस सूची को प्रिंट करें (यहां निर्देश के बाद "." वर्तमान डायरेक्ट्री को इंगित करने वाला एकल तर्क है). हर लाइन में एक ऐब्सलूट पाथ प्रिंट करें.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
हम यह मान लेंगे कि सभी डायरेक्ट्री में नाम दोहराए नहीं गए हैं. हालांकि, यह ज़रूरी नहीं है: पक्का करें कि इस बात की जांच की जाए कि अनुमान का उल्लंघन हुआ है या नहीं.
पार्ट B (फ़ाइल कॉपी करना)
अगर "--टूडर डायर" है, विकल्प कमांड लाइन के शुरू में मौजूद होता है. कुछ भी प्रिंट न करें और इसके बजाय फ़ाइलों को दी गई डायरेक्ट्री में कॉपी करें, ताकि ज़रूरत पड़ने पर उसे बनाया जा सके. Python मॉड्यूल "shutil" का इस्तेमाल करना फ़ाइल कॉपी करने के लिए.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
पार्ट C (बाहरी प्रोग्राम के लिए कॉल करना)
अगर "--tozip zipfile" विकल्प, कमांड लाइन की शुरुआत में मौजूद होता है. इस निर्देश को चलाएं: "zip -j zipfile <list all the files>". इससे फ़ाइलों वाली एक ZIP फ़ाइल बन जाएगी. मनोरंजन/आश्वासन के लिए, वह कमांड लाइन भी प्रिंट करें जो आपको सबसे पहले करनी है (जैसा कि लेक्चर में दिखाया गया है). (Windows नोट: Windows डिफ़ॉल्ट रूप से मानक .zip संग्रह बनाने के लिए प्रोग्राम के साथ नहीं आता है, लेकिन आप www.info-zip.org से मुफ़्त और ओपन ज़िप प्रोग्राम डाउनलोड कर सकते हैं.)
Linux उपयोगकर्ताओं के लिए, अगर आपने zip
इंस्टॉल नहीं किया है, तो
sudo apt install zip
पर कॉल करके इसे इंस्टॉल कर सकते हैं .
$ ./copyspecial.py --tozip tmp.zip .Command I'm going to do:zip -j tmp.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
अगर चाइल्ड प्रोसेस किसी गड़बड़ी के कोड के साथ बंद हो जाती है, तो गड़बड़ी कोड के साथ बाहर निकलें और कमांड का आउटपुट प्रिंट करें. इसका परीक्षण करने के लिए किसी ऐसी निर्देशिका में ज़िप फ़ाइल लिखने का प्रयास करें जो मौजूद नहीं है.
$ ./copyspecial.py --tozip /no/way.zip .Command I'm going to do:zip -j /no/way.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
zip I/O error: No such file or directory zip error: Could not create output file (/no/way.zip)