Python Copy Special Exercies in Japanese

Google による Python の授業 (日本語訳)/ Google's Python Class (英語原文)

資料
日本語訳: 設定/ 入門/ 文字列/ リスト/ 整列/ 辞書とファイル/ 正規表現/ ユーティリティ
英語原文: Set Up/ Introduction/ Strings/ Lists/ Sorting/ Dict and Files/ Reg. Exp./ Utilities

練習問題
日本語訳: 基本問題/ 新生児名/ 特殊なコピー / アクセス履歴のパズル
英語原文: Basic Exercises/ Baby Names Exercise/ Copy Special Exercise/ Log Puzzle Exercise

講義映像
英語
1日目: Introduction, Strings/ Lists and Sorting/ Dicts and Files
2日目: Regular Expression/ Utilities/ Utilities urllib/ Conclusions

特殊なコピーの練習問題


特殊なコピーの練習問題は, Python Utilities (英語原文), Python ユーティリティ (日本語訳) の節で説明したファイルシステムと外部コマンドに関するものです. この練習問題は google-python-exercises ディレクトリの中の "copyspecial" ディレクトリにあります (google-python-exercises.zip をまだダウンロードしていないなら, ダウンロードして, 詳しくは Set Up (英語原文), 設定 (日本語訳) を見ること). copyspecial.py にあなたのコードを加えること.
プログラム copyspecial.py は引数に 1つ以上のディレクトリを取ります. "特殊な" ファイルとは, どこかに __w__ というパターンを名前に含むものを いいます. ただし, w は 1つ以上の文字を表します. 提供される main() はコマンドラインの引数を構文解析するコードを 含みますが, 残りはあなた次第です. 以下に説明する特徴を実装する関数を書き, 自分で書いた関数を呼ぶように main() を変更すること.
解答の参考になると思われる中間目標 (詳細は以下に)
  • get_special_paths(dir) -- 与えられたディレクトリの特殊なファイルの絶対パスのリストを返す.
  • copy_to(paths, dir) -- パスのリストが与えられたとき, それらのファイルを与えられたディレクトリに コピーする.
  • zip_to(paths, zipfile) -- パスのリストが与えられたとき, それらのファイルを zip コマンドで まとめて圧縮し, 指定されたファイル名 zipfile とする.

Part A (ファイルパスの操作)


引数に与えられた全ての ディレクトリに含まれる特殊なファイルに対する 絶対パスのリストを作成すること. 最も簡単な場合, そのリストを出力だけすること (ここで, コマンドの直後の "." は, 現在いるディレクトリを示す単一の引数とする). 1行に1つの絶対パスを表示すること.
$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

異なるディレクトリであっても, 同じファイル名は存在しないと仮定する. (選択自由の課題: この仮定が成り立つかを確認して, 成り立っていないなら, エラーを出力すること. )

Part B (ファイルのコピー)


"--todir dir" オプションがコマンドラインの初めにあるなら, 何も表示せず, 指定されたディレクトリにファイルをコピーする. ただし必要があれば, そのディレクトリを作成すること. ファイルのコピーには, Python のモジュール "shutil" を使うこと.
$ ./copyspecial.py --todir /tmp/fooby .
$ ls /tmp/fooby
xyz__hello__.txt        zz__something__.jpg

Part C (外部プログラムの呼び出し)


"--tozip zipfile" オプションがコマンドラインの初めにあるなら, "zip -j zipfile <list all the files>" というコマンドを実行する. このコマンドは, それらのファイルすべてを含む zip ファイルを作ります. 楽しみ/安心のために, (講義で示したように) 初めに実行しようとするコマンドラインを出力すること. (Windows に関する注意: Windows は, 初期設定では 標準の .zip アーカイブを生成するプログラムは入っていませんが, www.info-zip.org から フリーでソースが公開されている 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)

この資料は Google の Nick Parlante によって作成されたものの翻訳です. Google による Python の授業の文章と映像は Creative Commons Attribution 2.5 ライセンスの下で利用できます.