แบบฝึกหัดคัดลอกแบบพิเศษจะใช้ร่วมกับเนื้อหาคำสั่งของระบบไฟล์และคำสั่งภายนอกในส่วน Python Utilities แบบฝึกหัดนี้อยู่ในไดเรกทอรี "copyspecial" ภายใน google-python-exercises (ดาวน์โหลด google-python-exercises.zip ถ้าคุณยังไม่ได้ดาวน์โหลด โปรดดูรายละเอียดในตั้งค่า) เพิ่มโค้ดใน copyspecial.py
โปรแกรม copy Special.py จะใช้ไดเรกทอรีเป็นอาร์กิวเมนต์อย่างน้อย 1 ไดเรกทอรี เราจะระบุว่าไฟล์ "พิเศษ" คือไฟล์ที่มีชื่อมีรูปแบบ __w__ ที่ใดที่หนึ่ง ซึ่ง w เป็นอักขระของคำอย่างน้อยหนึ่งคำ Main() ที่ระบุจะมีโค้ดสำหรับแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง แต่ส่วนที่เหลือจะขึ้นอยู่กับคุณ เขียนฟังก์ชันเพื่อนำคุณลักษณะด้านล่างไปใช้และแก้ไข main() เพื่อเรียกใช้ฟังก์ชัน
ฟังก์ชันที่แนะนำสำหรับโซลูชันของคุณ(โปรดดูรายละเอียดด้านล่าง)
- get_special_paths(dir) -- แสดงรายการเส้นทางสัมบูรณ์ของไฟล์พิเศษในไดเรกทอรีที่ระบุ
- copy_to(paths, dir) ที่ระบุรายการเส้นทาง แล้วคัดลอกไฟล์เหล่านั้นลงในไดเรกทอรีที่กำหนด
- ZIP_to(paths, zippath) ที่มีรายการเส้นทาง บีบอัดไฟล์เหล่านั้นลงใน zipfile ที่ระบุ
ส่วน 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
ส่วน ค (การเรียกโปรแกรมภายนอก)
หากมีตัวเลือก "--tozip zipfile" อยู่ที่จุดเริ่มต้นของบรรทัดคำสั่ง ให้เรียกใช้คำสั่ง "zip -j zipfile <list all the files>" ซึ่งจะสร้าง ZIPfile ที่มีไฟล์ เพื่อความสนุก/เพื่อให้มั่นใจ โปรดพิมพ์บรรทัดคำสั่งที่คุณจะใช้ก่อน (ตามที่แสดงในการบรรยาย) (หมายเหตุของ 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)