תרגיל ההעתקה המיוחדת מלווה בחומר של מערכת הקבצים והפקודות החיצוניות בקטע כלי עזר של Python. תרגיל זה נמצא ב"עותק מיוחד" בספרייה google-python-exercises (הורידו את google-python-exercises.zip אם עדיין לא עשיתם זאת, לפרטים נוספים, ראו הגדרה). מוסיפים את הקוד בכתובת copyspecial.py.
התוכנית Copyמכסת.py מתייחסת לספרייה אחת או יותר כארגומנטים. אנחנו נגיע להנחיה 'מיוחדת' קובץ הוא שם שבו השם מכיל את התבנית __w__ במקום כלשהו, שבו ה-w הוא תו אחד או יותר. ה-Primary() שסופק כולל קוד לניתוח הארגומנטים בשורת הפקודה, אבל השאר תלוי בכם. כתבו פונקציות כדי להטמיע את התכונות שבהמשך ולשנות את ה-Main() כדי לקרוא לפונקציות.
הצעות לפונקציות לפתרון(פרטים בהמשך):
- get_first_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" האפשרות מופיעה בתחילת שורת הפקודה, לא להדפיס דבר, אלא להעתיק את הקבצים לספרייה הנתונה וליצור אותה במקרה הצורך. שימוש במודול python 'shutil' להעתקת קבצים.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
חלק ג' (קריאה לתוכנית חיצונית)
אם קובץ ה-zip " --tozip" האפשרות קיימת בתחילת שורת הפקודה, מריצים את הפקודה הבאה: "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)