कॉपी स्पेशल एक्सरसाइज़, Python Utilities सेक्शन में फ़ाइल-सिस्टम और बाहरी कमांड से जुड़े कॉन्टेंट के साथ काम करती है. यह अभ्यास google-python-exercises में "copyspecial" डायरेक्ट्री में है. अगर आपने पहले से ऐसा नहीं किया है, तो google-python-exercises.zip डाउनलोड करें. ज़्यादा जानकारी के लिए, सेट अप करें देखें. कॉपीspecial.py में अपना कोड जोड़ें.
कॉपीspecial.py प्रोग्राम अपने तर्कों के तौर पर एक या उससे ज़्यादा डायरेक्ट्री लेता है. हम मान लेंगे कि "खास" फ़ाइल वह होती है जहां नाम में कहीं __w__ पैटर्न होता है, जहां w एक या उससे ज़्यादा वर्ड वर्ण होता है. कमांड लाइन तर्कों को पार्स करने के लिए दिए गए मुख्य() में कोड शामिल होते हैं, लेकिन बाकी सब आप पर निर्भर करता है. नीचे दी गई सुविधाओं को लागू करने के लिए फ़ंक्शन लिखें और अपने फ़ंक्शन को कॉल करने के लिए मुख्य() में बदलाव करें.
आपके समाधान के लिए सुझाए गए फ़ंक्शन(जानकारी नीचे दी गई है):
- get_special_paths(direct) -- दी गई डायरेक्ट्री में खास फ़ाइलों के ऐब्सलूट पाथ की सूची दिखाता है
- पाथ की सूची दिए जाने पर, Copy_to(paths, dr) उन फ़ाइलों को दी गई डायरेक्ट्री में कॉपी करता है
- ZIP_to(paths, zippath) पाथ की सूची के साथ, उन फ़ाइलों को दी गई zipफ़ाइल में ज़िप करें
पार्ट A (फ़ाइल पाथ में हेर-फेर करना)
सभी डायरेक्ट्री में खास फ़ाइलों के ऐब्सलूट पाथ की सूची इकट्ठा करें. सबसे आसान स्थिति में, बस उस सूची को प्रिंट करें (यहां निर्देश के बाद "." है. यह सिर्फ़ एक तर्क है, जो मौजूदा डायरेक्ट्री को दिखाता है). हर लाइन में एक ऐब्सलूट पाथ प्रिंट करें.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
हम मान लेंगे कि नाम को डायरेक्ट्री में दोहराया नहीं गया है (ज़रूरी नहीं: जांच लें कि अनुमान लगाए गए हैं और अगर उल्लंघन हुआ है, तो गड़बड़ी का पता लगाएं).
पार्ट B (फ़ाइल कॉपी करना)
अगर कमांड लाइन की शुरुआत में "--toder der" विकल्प मौजूद है, तो कुछ भी प्रिंट न करें. इसके बजाय, फ़ाइलों को दी गई डायरेक्ट्री में कॉपी करें और ज़रूरत पड़ने पर उसे बनाएं. फ़ाइल कॉपी करने के लिए, 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 से मुफ़्त और ओपन ZIP प्रोग्राम डाउनलोड किया जा सकता है.)
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
अगर चाइल्ड प्रोसेस किसी गड़बड़ी कोड के साथ बाहर हो जाती है, तो गड़बड़ी कोड के साथ बाहर निकलें और कमांड के आउटपुट को प्रिंट करें. किसी ऐसी डायरेक्ट्री में zip फ़ाइल लिखने की कोशिश करके इसकी जांच करें जो मौजूद नहीं है.
$ ./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)