แบบฝึกหัด "คัดลอกแบบพิเศษ" ใช้กับระบบไฟล์และเนื้อหาคำสั่งภายนอกในส่วน Python Utilities แบบฝึกหัดนี้จัดอยู่ในหัวข้อ "copyspecial" ภายใน google-python-exercises (ดาวน์โหลด google-python-exercises.zip หากยังไม่ได้ทำ โปรดดูรายละเอียดที่ตั้งค่า) เพิ่มโค้ดใน copyspecial.py
โปรแกรม copyspecial.py จะใช้ไดเรกทอรีอย่างน้อย 1 รายการเป็นอาร์กิวเมนต์ เราจะบอกว่า คือ โดยที่ชื่อมีรูปแบบ __w__ อยู่ที่ใดที่หนึ่ง โดยที่ w เป็นอักขระของคำอย่างน้อยหนึ่งคำ Main() ที่ให้ไว้จะมีโค้ดสำหรับแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง แต่ส่วนที่เหลือขึ้นอยู่กับคุณ เขียนฟังก์ชันเพื่อใช้ฟีเจอร์ด้านล่าง และแก้ไข main() เพื่อเรียกใช้ฟังก์ชันของคุณ
ฟังก์ชันที่แนะนำสำหรับโซลูชัน(ดูรายละเอียดด้านล่าง)
- get_special_paths(dir) -- แสดงรายการเส้นทางสัมบูรณ์ของไฟล์พิเศษในไดเรกทอรีที่กำหนด
- copy_to(paths, dir) สำหรับรายการเส้นทาง คัดลอกไฟล์เหล่านั้นไปยังไดเรกทอรีที่กำหนด
- zip_to(paths, zippath) ตามรายการเส้นทาง ให้ซิปไฟล์เหล่านั้นลงใน zipfile ที่กำหนด
ส่วน A (การจัดการเส้นทางไฟล์)
รวบรวมรายการเส้นทางสัมบูรณ์ของไฟล์พิเศษในไดเรกทอรีทั้งหมด ในกรณีที่ง่ายที่สุด เพียงแค่พิมพ์รายการนั้น (ในที่นี้คือ "." หลังคำสั่งจะเป็นอาร์กิวเมนต์เดียวที่ระบุไดเรกทอรีปัจจุบัน) พิมพ์เส้นทางสัมบูรณ์บรรทัดละ 1 รายการ
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
เราจะสันนิษฐานว่าชื่อไม่ได้ใช้ซ้ำในไดเรกทอรี (ไม่บังคับ: โปรดตรวจสอบสมมติฐานและข้อผิดพลาดว่ามีการละเมิดหรือไม่)
ส่วน ข (การคัดลอกไฟล์)
หากสัญลักษณ์ "--todir" ปรากฏที่จุดเริ่มต้นของบรรทัดคำสั่ง ไม่ต้องพิมพ์อะไร แต่คัดลอกไฟล์ไปยังไดเรกทอรีที่กำหนดแทน ให้สร้างไฟล์หากจำเป็น ใช้โมดูล 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 ที่มีไฟล์ต่างๆ พิมพ์บรรทัดคำสั่งที่คุณจะทำก่อน (ตามที่แสดงในการบรรยาย) เพื่อความสนุกสนาน/ความมั่นใจ) (หมายเหตุสำหรับ 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)