Sao chép bài tập đặc biệt Python

Bài tập Sao chép đặc biệt kết hợp với tài liệu từ hệ thống tệp và lệnh bên ngoài trong mục Python Extensions (Tiện ích Python). Bài tập này nằm trong thư mục "copyspecial" trong google-python-exercises (tải google-python-exercises.zip xuống nếu bạn chưa tải, xem phần Thiết lập để biết thông tin chi tiết). Thêm mã của bạn trong copyspecial.py.

Chương trình copyspecial.py lấy một hoặc nhiều thư mục làm đối số. Chúng ta sẽ nói rằng tệp "đặc biệt" là tệp có tên chứa mẫu __w__ ở đâu đó, trong đó w là một hoặc nhiều ký tự từ. main() được cung cấp bao gồm mã để phân tích cú pháp các đối số dòng lệnh, nhưng phần còn lại là do bạn thực hiện. Viết các hàm để triển khai các tính năng bên dưới và sửa đổi main() để gọi các hàm.

Hàm đề xuất cho giải pháp của bạn(thông tin chi tiết bên dưới):

  • get_special_paths(dir) – trả về danh sách đường dẫn tuyệt đối của các tệp đặc biệt trong thư mục đã cho
  • copy_to(paths, dir) được cung cấp một danh sách đường dẫn, rồi sao chép các tệp đó vào thư mục cụ thể
  • zip_to(đường dẫn, zippath) được cung cấp danh sách đường dẫn, hãy nén các tệp đó vào tệp zip đã cho

Phần A (chỉnh sửa đường dẫn tệp)

Thu thập danh sách các đường dẫn tuyệt đối của các tệp đặc biệt trong tất cả thư mục. Trong trường hợp đơn giản nhất, chỉ cần in danh sách đó (ở đây là "." sau lệnh là một đối số duy nhất cho biết thư mục hiện tại). In một đường dẫn tuyệt đối trên mỗi dòng.

$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

Chúng tôi sẽ giả định rằng các tên không được lặp lại trên tất cả các thư mục (không bắt buộc: kiểm tra xem giả định đó có bị sử dụng sai hay không và xem lỗi có bị vi phạm hay không).

Phần B (sao chép tệp)

Nếu tuỳ chọn "--todir dir" xuất hiện ở đầu dòng lệnh, đừng in bất kỳ nội dung nào mà thay vào đó hãy sao chép các tệp vào thư mục cho trước, tạo thư mục nếu cần. Sử dụng mô-đun python "shutil" để sao chép tệp.

$ ./copyspecial.py --todir /tmp/fooby .
$ ls /tmp/fooby
xyz__hello__.txt        zz__something__.jpg

Phần C (gọi một chương trình bên ngoài)

Nếu tuỳ chọn "--tozip zipfile" xuất hiện ở đầu dòng lệnh, hãy chạy lệnh sau: "zip -j zipfile <list all the files>". Thao tác này sẽ tạo một tệp zip chứa các tệp. Để tạo niềm vui/sự an tâm, bạn cũng có thể in dòng lệnh mà bạn sẽ làm trước tiên (như trong bài giảng). (Lưu ý của Windows: windows không đi kèm với chương trình để tạo tệp lưu trữ .zip tiêu chuẩn theo mặc định, nhưng bạn có thể tải chương trình zip mở và miễn phí xuống từ www.info-zip.org.) Đối với người dùng Linux, nếu chưa cài đặt zip, bạn có thể cài đặt bằng cách gọi 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

Nếu quá trình con thoát kèm theo mã lỗi, hãy thoát kèm theo mã lỗi và in kết quả của lệnh. Hãy kiểm tra điều này bằng cách thử ghi một tệp zip vào thư mục không tồn tại.

$ ./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)