نسخ تمرين بايثون خاص

يتضمن تمرين النسخ الخاص مواد نظام الملفات والأوامر الخارجية في قسم أدوات Python. هذا التمرين موجود في الدليل "copyspecial" ضمن google-python-exercises (تنزيل google-python-exercises.zip إذا لم يسبق لك ذلك، والاطِّلاع على الإعداد للحصول على التفاصيل). أضف التعليمة البرمجية في Copyspecial.py.

يستخدم البرنامج Copyspecial.py دليلاً واحدًا أو أكثر كوسيطات له. لنفترض أن الملف "الخاص" هو الملف الذي يحتوي فيه الاسم على النمط __w__ في مكان ما، حيث يكون w حرفًا واحدًا أو أكثر من أحرف الكلمة. يتضمن الإصدار الرئيسي() المقدم رمزًا برمجيًا لتحليل وسيطات سطر الأوامر، ولكن الباقي متروك لك. اكتب الدوال لتنفيذ الميزات أدناه وعدّل رئيسي() لاستدعاء الدوال.

الدوال المقترحة للحل الذي تستخدمه(يُرجى الاطّلاع على التفاصيل أدناه):

  • 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)