« MIT Python 教室 第21回 (シミュレーション結果の確認、曲線のあてはめ、線形回帰、PyLab) | トップページ | R packages for machine learning and statistical learning »

2010-04-12

Python Copy Special Exercise in Japanese

Nick Parlante 氏による Google's Python Class で 出されている演習問題の3つ目, Copy Special Exercise を翻訳してみました. この演習問題を含む資料全体が クリエイティブ コモンズライセンスにより公開されています. このライセンスにより公開して頂いていることに 感謝しています. 以下の翻訳も同じライセンスに従います.
今回翻訳した演習を含む, 4種類の演習の いずれに対しても, 模範解答が問題とともに提供されています.

(5月3日追加)
練習問題だけでなく, Google's Python Class の講義資料も翻訳してみました. 翻訳版のホームページから 各項目へのリンクがあります. 講義映像を見なくても講義資料の情報のみで練習問題は解けるようになっています.
(5月3日追加ここまで)


特殊なコピーに関する Python の練習問題
特殊なコピーの練習問題は, Python ユーティリティ (訳注: リンク先は英語) の節で説明したファイルシステムと外部コマンドに関するものです. この練習問題は google-python-exercises ディレクトリの中の "copyspecial" ディレクトリにあります (google-python-exercises.zip をまだダウンロードしていないなら, ダウンロードして, 詳しくは 設定 (訳注: リンク先は英語) を見ること). 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)

« MIT Python 教室 第21回 (シミュレーション結果の確認、曲線のあてはめ、線形回帰、PyLab) | トップページ | R packages for machine learning and statistical learning »

Google's Python Class」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1174621/34192663

この記事へのトラックバック一覧です: Python Copy Special Exercise in Japanese:

« MIT Python 教室 第21回 (シミュレーション結果の確認、曲線のあてはめ、線形回帰、PyLab) | トップページ | R packages for machine learning and statistical learning »