Latihan Copy Special berlaku untuk sistem file dan materi perintah eksternal di bagian Python Utilitas. Latihan ini ada dalam kategori "salinan khusus" dalam google-python-exercises (download google-python-exercises.zip jika belum, lihat Menyiapkan untuk detailnya). Tambahkan kode Anda di copyspecial.py.
Program copyspecial.py mengambil satu atau beberapa direktori sebagai argumennya. Kita akan mengatakan bahwa "khusus" file adalah file yang namanya berisi pola __w__ di suatu tempat, di mana w adalah satu atau beberapa karakter kata. Main() yang disediakan menyertakan kode untuk mengurai argumen baris perintah, tetapi sisanya terserah Anda. Tulis fungsi untuk mengimplementasikan fitur di bawah ini dan modifikasi main() untuk memanggil fungsi Anda.
Fungsi yang disarankan untuk solusi Anda(detail di bawah):
- get_special_paths(dir) -- mengembalikan daftar jalur absolut dari file khusus pada direktori yang ditentukan
- copy_to(paths, dir) dengan daftar jalur yang diberikan, menyalin file tersebut ke direktori yang ditentukan
- zip_to(paths, zippath) yang diberikan daftar jalur, menjadi zip file tersebut ke dalam zipfile yang diberikan
Bagian A (memanipulasi jalur file)
Kumpulkan daftar jalur absolut file khusus di semua direktori. Dalam kasus yang paling sederhana, cukup cetak daftar tersebut (di sini "." setelah perintah adalah satu argumen yang menunjukkan direktori saat ini). Mencetak satu jalur absolut per baris.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
Kita akan menganggap bahwa nama tidak diulang di seluruh direktori (opsional: periksa asumsi tersebut dan buat kesalahan jika dilanggar).
Bagian B (penyalinan file)
Jika "--todir dir" ada di awal baris perintah, jangan mencetak apa pun dan sebagai gantinya salin file ke direktori yang diberikan, membuatnya jika perlu. Menggunakan modul python "shutil" penyalinan file.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
Bagian C (memanggil program eksternal)
Jika "--tozipfile zip" ada di awal command line, jalankan perintah ini: "zip -j zipfile <list all the files>". Tindakan ini akan membuat {i>zipfile<i} yang berisi file. Untuk bersenang-senang/meyakinkan, cetak juga baris perintah yang akan Anda lakukan terlebih dahulu (seperti yang ditunjukkan dalam presentasi). (Catatan Windows: Windows tidak dilengkapi dengan program untuk menghasilkan arsip .zip standar secara default, tetapi Anda dapat mengunduh program zip gratis dan terbuka dari www.info-zip.org.)
Untuk pengguna Linux, jika Anda belum menginstal zip
,
dapat menginstalnya dengan memanggil 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
Jika proses turunan keluar dengan kode error, keluar dengan kode error dan cetak output perintah. Uji ini dengan mencoba menulis file zip ke direktori yang tidak ada.
$ ./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)