העתקת תרגיל Python מיוחד

התרגיל 'העתקה מיוחדת' תואם לחומר של מערכת הקבצים והפקודות החיצוניות בקטע כלי תחזוקה של Python. תרגיל זה נמצא בספרייה "copyspecial" בתוך google-python-exercises (הורד google-python-exercises.zip אם עדיין לא עשית זאת, עיין בהגדרה לקבלת פרטים). מוסיפים את הקוד בכתובת copyspecial.py.

התוכנית copyspecial.py לוקחת ספרה אחת או יותר כארגומנטים. נניח שקובץ "מיוחד" הוא קובץ שבו השם מכיל את הדפוס __w__ במקום כלשהו, כאשר w הוא תו אחד או יותר של מילים. ה-main() שסופק כוללת קוד לניתוח הארגומנטים של שורת הפקודה, אבל השאר תלוי בכם. צריך לכתוב פונקציות כדי להטמיע את התכונות שלמטה ולשנות את main() כדי לקרוא לפונקציות שלך.

פונקציות מוצעות לפתרון(פרטים בהמשך):

  • get_special_paths(dir) – החזרת רשימה של הנתיבים המוחלטים של הקבצים המיוחדים בספרייה הנתונה
  • עותקי_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

חלק ג' (התקשרות לתוכנית חיצונית)

אם האפשרות "--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)