يتم استخدام تمرين "نسخ خاص" مع مواد نظام الملفات والأوامر الخارجية في قسم أدوات Python. يندرج هذا التمرين ضمن العمود "copyspecial" الدليل ضمن google-python-exercises (نزِّل google-python-exercises.zip إذا لم يسبق لك إجراء ذلك، راجِع الإعداد للحصول على التفاصيل). أضف التعليمة البرمجية في Copyspecial.py.
يستخدم برنامج Copyspecial.py دليلاً واحدًا أو أكثر كوسيطات له. سنقول إن الحدث "خاص" يكون فيه الاسم يحتوي على النمط __w__ في مكان ما، حيث يكون w هو حرف كلمة أو أكثر. تتضمن الدالةرئيسية() الرئيسية التعليمات البرمجية لتحليل وسيطات سطر الأوامر، ولكن الباقي متروك لك. كتابة الدوال لتنفيذ الميزات أدناه وتعديل main() لاستدعاء الدوال.
الدوال المقترحة للحل(التفاصيل أدناه):
- get_special_paths(dir) -- الرجوع إلى قائمة بالمسارات المطلقة للملفات الخاصة في الدليل المحدّد
- Copy_to(paths, dir) قائمة من المسارات، ينسخ هذه الملفات في الدليل المحدّد.
- zip_to(paths, zippath) نظرًا لقائمة المسارات، اضغط على هذه الملفات في ملف zip المحدد
الجزء أ (معالجة مسارات الملفات)
اجمع قائمة بالمسارات المطلقة للملفات الخاصة في جميع الأدلة. في أبسط الحالات، اطبع هذه القائمة (هنا "." بعد الأمر توجد وسيطة واحدة تشير إلى الدليل الحالي). اطبع مسارًا مطلقًا واحدًا في كل سطر.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
سنفترض أنّ الأسماء لا تتكرّر في الأدلة (اختياري: تحقَّق من هذا الافتراض والخطأ في حال انتهاكها).
الجزء ب (نسخ الملفات)
إذا كان الحقل " --todir dir" موجودًا في بداية سطر الأوامر، فلا تطبع أي شيء ولكن انسخ الملفات إلى الدليل المحدد بدلاً من ذلك، وقم بإنشائه إذا لزم الأمر. استخدام وحدة بايثون "shutil" لنسخ الملفات.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
الجزء ج (طلب برنامج خارجي)
إذا كان الملف " --tozip zipfile" في بداية سطر الأوامر، شغِّل الأمر التالي: "zip -j zipfile <list all the files>".
سيؤدي هذا إلى إنشاء ملف zip يحتوي على الملفات. للاطمئنان/المتعة فقط، اطبع أيضًا سطر الأوامر الذي ستفعله أولاً (كما هو موضح في المحاضرة). (ملاحظة في نظام التشغيل Windows: لا تتوفر في Windows برنامج لإنتاج أرشيفات .zip عادية بشكل تلقائي، ولكن يمكنك تنزيل برنامج 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
إذا تم الخروج من العملية الفرعية مع ظهور رمز خطأ، يمكنك الخروج برمز خطأ واطبع ناتج الأمر. اختبر ذلك عن طريق محاولة كتابة ملف 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)