คัดลอกแบบฝึกหัด Python พิเศษ

แบบฝึกหัดคัดลอกแบบพิเศษจะใช้ร่วมกับเนื้อหาคำสั่งของระบบไฟล์และคำสั่งภายนอกในส่วน 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)