Bài tập Sao chép đặc biệt đi kèm với tài liệu về hệ thống tệp và lệnh bên ngoài trong mục Tiện ích Python. Bài tập này nằm trong "copyspecial" thư mục trong google-python-exercises (tải tệp google-python-exercises.zip xuống nếu bạn chưa tải xuống, hãy xem phần Thiết lập để biết 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 tôi sẽ nói rằng "đặc biệt" là tệp mà tên có chứa mẫu __w__ ở đâu đó, trong đó w là một hoặc nhiều ký tự từ. Hàm 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 sẽ do bạn quyết định. 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 của bạn.
Hàm được đề 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 các đườ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, hãy sao chép các tệp đó vào thư mục đã cho
- zip_to(đường dẫn, zippath) khi cung cấp một danh sách đường dẫn, hãy nén các tệp đó vào tệp zip nhất định
Phần A (thao tác với đườ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, bạn chỉ cần in danh sách đó (ở đây "." 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 tên không được lặp lại trên các thư mục (không bắt buộc: kiểm tra giả định và loại ra lỗi nếu vi phạm tên đó).
Phần B (sao chép tệp)
Nếu mục "--todir" hiển thị ở đầu dòng lệnh, đừng in bất cứ nội dung gì mà thay vào đó hãy sao chép các tệp vào thư mục đã cho để 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 chương trình bên ngoài)
Nếu tệp zip "--tozip" 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 đó. Để cho vui/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 ý: 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 xuống chương trình zip miễn phí và mở 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 tiện ích đó 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 quy trình con thoát với mã lỗi, hãy thoát với mã lỗi và in kết quả của lệnh. Kiểm tra điều này bằng cách cố gắng ghi 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)