কপি স্পেশাল এক্সারসাইজটি পাইথন ইউটিলিটি বিভাগে ফাইল-সিস্টেম এবং বাহ্যিক কমান্ড উপাদানের সাথে যায়। এই অনুশীলনটি google-python-exercises-এর মধ্যে "copyspecial" ডিরেক্টরিতে রয়েছে (আপনি যদি ইতিমধ্যে না থাকেন তবে google-python-exercises.zip ডাউনলোড করুন, বিস্তারিত জানার জন্য সেট আপ দেখুন)। copyspecial.py এ আপনার কোড যোগ করুন।
copyspecial.py প্রোগ্রাম তার আর্গুমেন্ট হিসাবে এক বা একাধিক ডিরেক্টরি নেয়। আমরা বলব যে একটি "বিশেষ" ফাইল হল একটি যেখানে নামের প্যাটার্ন __w__ কোথাও রয়েছে, যেখানে w হল এক বা একাধিক শব্দের অক্ষর। প্রদত্ত main() কমান্ড লাইন আর্গুমেন্ট পার্স করার জন্য কোড অন্তর্ভুক্ত করে, কিন্তু বাকিটা আপনার উপর নির্ভর করে। নীচের বৈশিষ্ট্যগুলি বাস্তবায়নের জন্য ফাংশনগুলি লিখুন এবং আপনার ফাংশনগুলিকে কল করতে main() পরিবর্তন করুন৷
আপনার সমাধানের জন্য প্রস্তাবিত ফাংশন (নিচে বিস্তারিত):
- get_special_paths(dir) -- প্রদত্ত ডিরেক্টরিতে বিশেষ ফাইলের পরম পাথের একটি তালিকা প্রদান করে
- copy_to(paths, dir) পাথের একটি তালিকা দেওয়া হয়েছে, সেই ফাইলগুলিকে প্রদত্ত ডিরেক্টরিতে অনুলিপি করে
- zip_to(পাথ, জিপপথ) পাথের একটি তালিকা দেওয়া হয়েছে, সেই ফাইলগুলিকে প্রদত্ত জিপফাইলে জিপ করুন
অংশ A (ফাইল পাথ ম্যানিপুলেট করা)
সমস্ত ডিরেক্টরিতে বিশেষ ফাইলগুলির পরম পাথগুলির একটি তালিকা সংগ্রহ করুন। সবচেয়ে সহজ ক্ষেত্রে, শুধুমাত্র সেই তালিকাটি প্রিন্ট করুন (এখানে "." কমান্ডের পরে বর্তমান ডিরেক্টরি নির্দেশ করে একটি একক যুক্তি)। প্রতি লাইনে একটি পরম পথ প্রিন্ট করুন।
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
আমরা ধরে নেব যে নামগুলি ডিরেক্টরি জুড়ে পুনরাবৃত্তি হয় না (ঐচ্ছিক: সেই অনুমানটি পরীক্ষা করুন এবং এটি লঙ্ঘন হলে ত্রুটিটি বের করুন)।
পার্ট B (ফাইল কপি করা)
কমান্ড লাইনের শুরুতে "--todir dir" বিকল্পটি উপস্থিত থাকলে, কিছু মুদ্রণ করবেন না এবং পরিবর্তে ফাইলগুলিকে প্রদত্ত ডিরেক্টরিতে অনুলিপি করুন, প্রয়োজনে এটি তৈরি করুন। ফাইল কপি করার জন্য পাইথন মডিউল "শুটিল" ব্যবহার করুন।
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
পার্ট সি (একটি বহিরাগত প্রোগ্রাম কল করা)
কমান্ড লাইনের শুরুতে যদি "--tozip zipfile" বিকল্পটি উপস্থিত থাকে, তাহলে এই কমান্ডটি চালান: "zip -j zipfile <সব ফাইলের তালিকা>"। এটি ফাইলগুলি ধারণকারী একটি জিপফাইল তৈরি করবে। শুধু মজা/আশ্বাসের জন্য, আপনি প্রথমে যে কমান্ড লাইনটি করতে যাচ্ছেন সেটিও প্রিন্ট করুন (বক্তৃতায় দেখানো হয়েছে)। (উইন্ডোজ নোট: উইন্ডোজ ডিফল্টভাবে স্ট্যান্ডার্ড .zip আর্কাইভ তৈরি করার জন্য কোনও প্রোগ্রামের সাথে আসে না, তবে আপনি www.info-zip.org থেকে বিনামূল্যে এবং খোলা জিপ প্রোগ্রামটি ডাউনলোড করতে পারেন।) লিনাক্স ব্যবহারকারীদের জন্য, আপনি যদি না করেন 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)