تمرین ویژه پایتون را کپی کنید

تمرین Copy Special با فایل سیستم و مواد دستورات خارجی در بخش Python Utilities همراه است. این تمرین در دایرکتوری «copyspecial» در google-python-exercises قرار دارد (اگر قبلاً google-python-exercises.zip را دانلود نکرده اید، برای جزئیات به «تنظیم» مراجعه کنید). کد خود را در copyspecial.py اضافه کنید.

برنامه copyspecial.py یک یا چند دایرکتوری را به عنوان آرگومان های خود می گیرد. ما می گوییم که یک فایل "ویژه" فایلی است که نام آن حاوی الگوی __w__ در جایی باشد، جایی که w یک یا چند کاراکتر کلمه باشد. main() ارائه شده شامل کدی برای تجزیه آرگومان های خط فرمان است، اما بقیه به شما بستگی دارد. توابعی را برای پیاده سازی ویژگی های زیر بنویسید و main() را برای فراخوانی توابع خود تغییر دهید.

توابع پیشنهادی برای راه حل شما (جزئیات زیر):

  • get_special_paths(dir) - فهرستی از مسیرهای مطلق فایل‌های خاص در فهرست داده شده را برمی‌گرداند.
  • copy_to(paths, dir) با توجه به لیستی از مسیرها، آن فایل ها را در دایرکتوری داده شده کپی می کند
  • zip_to (مسیرها، zippath) لیستی از مسیرها داده شده است، آن فایل‌ها را در فایل فشرده بالا زیپ کنید

بخش A (دستکاری مسیرهای فایل)

لیستی از مسیرهای مطلق فایل های ویژه در همه دایرکتوری ها جمع آوری کنید. در ساده ترین حالت، فقط آن لیست را چاپ کنید (در اینجا "." بعد از دستور یک آرگومان واحد است که دایرکتوری فعلی را نشان می دهد). چاپ یک مسیر مطلق در هر خط.

$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

ما فرض می کنیم که نام ها در سراسر فهرست ها تکرار نمی شوند (اختیاری: این فرض را بررسی کنید و در صورت نقض آن خطا را برطرف کنید).

قسمت B (کپی کردن فایل)

اگر گزینه "--todir dir" در ابتدای خط فرمان وجود دارد، چیزی را چاپ نکنید و به جای آن فایل ها را در دایرکتوری داده شده کپی کنید و در صورت لزوم آن را ایجاد کنید. از ماژول 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 استاندارد ندارد، اما می توانید برنامه 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)