Pythonクックブック

キーフレーズ

self def return 文字列 print thon Python import name http:// メソッド レシピ モジュール ファイル python オプジェクト for class Credit リスト 関数 場合 クラス Unicode インスタンス スレッド コード data sys init 必要 None www append XML ディクショナリ text Windows dict file できる アイテム except ビルトイン get list html line path True .com ライプラリリファレンス 問題 参照 アプリケーション try 使う スクリプト テキスト else 鴨澤 眞夫 プログラム len クライアント socket 標準 コール 引数 データ リファレンス from 実行 key Twisted ライプラリ アプローチ decimal 使っ value 解法 start join チェック win32 Tkinter close シンプル 処理 シーケンス 方法 string command while キャラクタ object HTML credit 簡単 デザインパターン

目次

XXIII 目次 訳者まえがき・・・ まえがき・ 1 章 テキスト・・ イントロダクション・・ 1.0 1.1 文字列を 1 文字すっ処理する・・ 1.2 キャラクタとその文字コード値を相互変換・・ オプジェクトが文字列のようなものかテストする・・ 1.3 1.4 文字列の整形・ 1.5 文字列両端のスペースを刈り込む・・ 1.6 文字列の連結・ 1.7 文字列を単語ごとに反転する・・ 文字列にキャラクタセットの文字が含まれるか調べる・・ 1.8 文字列クラスの translate メソッドを簡便に使う・・ 1.9 文字列をキャラクタセットでフィルタリング・・・ 1.10 文字列がテキストかノヾイナリ調べる・・ 1.11 大文字小文字・・・ 1.12 文字列の一部にアクセスする・・ 1.13 インデントの変更・・ 1.14 タブとスペースの変換・・ 1.15 文字列中の変数に手を加える・・・ 1.16 文字列中の変数に手を加える ( thon2.4 以降 ) ・ 1.17 一度に複数のパターンの置換をする・・ 1.18 文字列末尾が各種パターンと一致するか調べる・・ 1.19 Unicode により多言語テキストを扱う・・ 1.20 Unicode と通常の文字列を相互変換・・ 1.21 標準出力に Unicode キャラクタを出力・・ 1.22 1 「 / 一 8 一 9 “・ 1 1 ワ」 L.C -1 ・ 4 「 / 1 ワ」【 0 、 6 -8 一 -1 0 け「 / -1 」 1 -1 -1 1 -1 ワ」ワ〕ワ】ワ」 00 つけつけ -4 4 4 -4

xxiv 一目次 1.23 XML や HTML 向けに Unicode データをエンコード・・ 1.24 一部の文字列のみ大文字小文字無関係にする・・・ 1.25 Un ⅸターミナル上で HTML をテキストに変換・・ 2 章ファイル・・・ イントロダクション・・ 2.0 ファイルを読む・・ 2.1 ファイルに書き込む・・ 2.2 ファイル中のテキストの検索置換・・ 2.3 ファイル中の特定の行を読み込む・・ 2.4 ファイルの行数を数える・・ ファイル中の全てのワードを処理する・・ 2.7 入出力をランダムアクセスで・・・ ランダムアクセスファイルの更新・・・ 2.8 zip ファイルのデータを読む・・ 2.9 文字列の中の zip ファイルの扱い・ 2.10 ファイルツリーを tar ファイルにして圧縮・・ 2.11 バイナリデータを Windows の標準出力に送る・・ 2.12 C + + 的な iostream シンタックスを使う・ 2.13 不可逆ストリーム入力のファイルを巻き戻す・・ 2.14 「ファイル的」オプジェクトを普通のファイルオプジェクトに 2.15 ディレクトリツリーの探索・・ 2.16 ディレクトリツリーに散在するファイルの拡張子を変更・・・ 2.17 サーチパスにあるファイルを見つける・・ 2.18 サーチパスとパターンマッチでファイルを見つける・・ 2.19 thon サーチパスにあるファイルを見つける・・ 2.20 th 。 n サーチパスの動的変更・・・ 2.21 相対パスを導き出す・・ 2.22 バッフアされない文字をプラットフォームに依存せずに読む・・ 2.23 Mac OS X で PDF のページ数を数える・・ 2.24 Windows でファイル属性を変更する・・ 2.25 OpenO 伍ce.org 文書からテキストを抽出・ 2.26 Microso れ Word 文書からテキストを抽出・・ 2.27 プラットフォームに依存せず API でファイルロック・・ 2.28 ファイル名にバージョンを・・ 2.29 CRC -64 の計算・・ 2.30 3 章時間とお金・・ -8 -1 【 0 7 0 ーワ 0 【 0 0 / -8 9 」ワ 0 -4 【〔 / 0- ワ 0 つけ L-O -8 9 、 0 ワ 0 つひ -4 【 / -0 -1 ワ 0 【っー 9 、 3 -1 1 -1 一 1 1 -11 -1 5

目冫欠 イントロダクション・・ 昨日と明日の計算・・ 先週の金曜日・・ 2 つの日付の間の期間は・・ 合計演奏時間・・ 2 つの日付の間のウィークデーの数・・・ 休日の自動計算・・ フアジーな日付解釈・・・ 4 章 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 夏時間が使用されているか調べる・・ タイムゾーン間の変換・・ コマンドの反復実行・・ コマンドの予定実行・ DecimaI ( 十進 ) による計算・・ DecimaI を通貨として整形する・・ thon を簡単な加算器に クレジットカードのチェックサム・・ 為替レートの監視・・・ ショートカット・・ イントロダクション・・ オプジェクトのコピー リスト内包でリストを作る・・ 指定した要素がリスト中に存在すれば返す・・ シーケンスのアイテムとそのインデックスをループ処理・・ 参照を共有せすにリストのリストを作る・・ 入れ子になったシーケンスの平滑化・・ 列から成るリストのデータを行単位で削除 2 次元配列の転置・・・ ディクショナリから値を得る・・ ディクショナリにエントリを追加・・ 引用符におばれすディクショナリ構築・・・ 並べ替え・・・ 名前のついたアイテム群を集めておく・・ 複数のディクショナリ集合から、和 ( U ) や交差 ( n) を探索・・・ メソッドや関数の発行にディクショナリを使う・・ ディクショナリの各キーに複数の値を割当てる・・ ディクショナリの反転・・・ ディクショナリの部分集合・・ キーと値が交互に入ったリストから dict を構築・・ XXV ・・ 113 ・・ 119 ・・ 121 ・・ 123 ・・ 124 ・・ 125 ・・ 127 ・・ 131 ・・ 132 ・・ 133 ・・ 135 ・・・ 136 ・・ 138 ・・ 140 ・・ 144 ・・ 147 ・・ 148 ・・ 183 ・・ 180 ・・ 179 ・・ 177 ・・ 176 ・・ 174 ・・ 172 ・・ 171 ・・ 169 ・・ 168 ・・ 166 ・・ 164 ・・ 162 ・・ 160 ・・ 159 ・・ 158 ・・ 156 ・・ 153 ・・ 151 ・・ 1 51

XXVi ー 5 章 6 章 目次 4.19 4.20 4.21 4.22 4.23 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 名前をソートしてイニシャルで分ける・・ ディクショナリにレーティング機能を・・ サプシーケンスを見つける・・ シーケンスにアイテムの存在チェックをかける・・・ クイックソートを 3 行で示す・・ n 番目に小さい要素は・・・ ソート済みシーケンスからアイテムを探索・・ シーケンスのアイテムを小さい方から取る・・ アイテムが加えられてもソート済みに保っ・・・ リストのアイテム全てをランダムな順序で処理・・ 含まれる数値で文字列をソート・・ キーやインデックスを、その値によりソート・・ オプジェクトのリストをオプジェクトの属性でソート・・ 文字列リストを大文字小文字無関係にソート・・ ディクショナリのソート・・ イントロダクション・・ サーチとソート・・ 指定のモジュール内で名前が定義されていることを保証する・・ 式中での例外処理・・ アイテムごとに確率を定めたランダム抽出・・ Python で printf ・・ 単一の文で代入と検査を同時に行う・・ オブジェクト指向プログラミング・・・ 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 イントロダクション・・ 温度スケールの変換・・ 定数を定義する・・ 属性の設定を制限・・・ ディレクトリ探索のチェーン化・・ 継承ではできないことをする ( 自動委譲 ) ・・ proxy で特殊メソッドを委譲・・ 名前付きアイテムのタブル・・ プロバティにアクセスするコードをキレイに オプジェクトのコピーを素早く・・ ガべージコレクションを邪魔することなく結合メソッドへのリファレンスを保持・・ インスタンスに変化があったかチェックする・・ リングバッフアを実装する・・ ・・ 185 ・・ 187 ・・ 188 ・・ 189 ・・・ 191 ・・ 1 93 ・・ 229 ・・・ 224 ・・・ 223 ・・・ 220 ・・・ 217 ・・・ 214 ・・・ 213 ・・ 211 ・・・ 209 ・・・ 207 ・・・ 206 ・・・ 203 200 ・・ 199 ・・ 198 ・・ 193 ・・・ 265 ・・・ 262 ・・・ 259 ・・・ 256 ・・・ 255 ・・・ 253 ・・ 250 ・・ 246 ・・・ 244 ・・・ 242 ・・・ 240 ・・・ 237 ・・・ 231 ・・・ 231

6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.20 オプジェクトが必要な属性を備えているかチェックする・・ State デザインパターンを実装する・・ Singleton デザインパターンを実装する・・ Singleton デザインパターンの使用を避けて Borg の方法を利用する・・ Null Object デザインパターンを実装する・・ init ーの引数でインスタンス変数を自動設定・・ スーパークラスの一 init ーが存在すれば実行する・・ スーパークラスのメソッドの共同呼び出しを簡潔かっ安全に 7 章 8 章 永続性、データベース・・ 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 イントロダクション・・ marshal モジュールを用いてデータをシリアライズする・・ pickle / cPickle モジュールを利用してシリアライズする・・ シリアライズしたデータを圧縮する・・ クラス、インスタンスに cPickle を使用する DBAPI モジュールに渡すパラメータのスタイルを統一する・・ データベースカーソルの内容をきれいに出力したい・ d ⅲ ple でクエリ結果にフレキシプルにアクセスする・・ フィールド名と列番号の対応表のディクショナリを生成する・・ BLOB を SQLite に保存する・・ BLOB を PostgreSQL に保存する・・ BLOB を MySQL に保存する・・・ MySQL データベースへのアクセス・・ Be ⅸ eleyDB データベースを使う・・ she ⅳ e を使ったオプジェクトに変更を加える・・・ コードオプジェクトを PickIe 化する・・ 結合メソッドを PickIe 化できる状態で保存する・・ ADO を経由して Microso れ Jet を使用する・・ Jython で Excel のデータを扱うために ODBC を利用する・・ Jython のサープレットから JDBC を使ってデータベースにアクセスしたい・ デバッグとテスト・・ 8.0 8.2 8.3 8.4 8.5 イントロダクション・・ ループや条件式の実行を止める・・ Linux 上でもメモリ使用量を測定する・・ ガべージコレクションの過程をデバッグ・・・ デバッグモードで式やコメントを追う・ 例外のトラップと記録・ ー XXVii ・・・ 269 ・・・ 272 ・・・ 274 ・・ 276 ・・・ 281 ・・ 284 ・・・ 286 ・・・ 289 ・・・ 293 ・・ 293 ・・・ 296 ・・ 298 ・・・ 300 ・・・ 301 ・・・ 304 ・・・ 306 ・・・ 309 ・・・ 311 ・・・ 314 ・・ 315 ・・ 317 ・・・ 318 ・・・ 320 ・・・ 322 ・・ 324 ・・・ 327 ・・ 329 ・・・ 331 ・・・ 334 ・・・ 337 目次 ・・・ 344 342 ・・ 341 ・・・ 339 ・・ 338 ・・ 337

XXViiil 9 章 1 0 章 目次 8.6 8.7 8.8 8.9 8.10 8.11 トレースパックからより多くの情報を・・ トラップできない例外で自動的にデバッガを起動・・・ 最も簡単なユニットテスト・・・ ユニットテストを自動的に doctest を unittest で使う (Python2.4) ・ ユニットテストで範囲値をチェック・・・ プロセスとスレッド、その同期・ 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13 イントロダクション・・ オプジェクト中の全メソッドを同期・・ スレッドの終了・・ Queue. Queue を順位付きキューとして使う・・ スレッドプール・・ 引数のセットをいくつも使って関数を並列実行・・・ 簡単なメッセージパッシングによるスレッド協調・・ スレッドごとの情報を保存・・・ スレッドを使わすに協調的マルチタスクを・・ Windows で、同じスクリプトが既に走っているか確かめる・・・ MsgWaitForMuItipleObjects で Windows メッセージの処理・・ p 叩 en で外部プロセスを駆動・・ Un ⅸシェルコマンドの標準出力、エラー出力をキャプチャ・・ デーモンのフォーク ( Un ⅸ ) ・・ システム管理・ 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 10.12 10.13 イントロダクション・・ ランダムなパスワードの生成・・ 簡単に覚えられて、ある意味ランダムなパスワードの生成・・ POP サーノヾを使ったユーザ認証・・ IP アドレスごとのヒット数集計 (Apache) ・ クライアントキャッシュのヒット率計算 ( Apache ) ・・ スクリプトからエデイタを起動・・ ファイルのノヾックアップ ... Mailbox ファイルを選択コピー Mailbox からアドレスのホワイトリストを作成・・ 重複メールのプロック・・ Windows のサウンドシステムをチェック・・ Windows DLL の登録・削除・・・ Windows のログイン時の自動実行タスクをチェック、修正・・ ・・・ 347 ・・・ 350 ・・・ 351 ・・・ 353 ・・・ 354 ・・ 357 ・・・ 359 ・・・ 359 ・・・ 362 ・・・ 365 ・・・ 367 ・・・ 369 ・・・ 373 ・・・ 375 ・・・ 378 ・・・ 381 ・・・ 383 ・・・ 385 ・・・ 388 ・・・ 389 ・・・ 392 ・・・ 395 ・・・ 395 ・・・ 396 ・・・ 397 ・・・ 400 ・・ 402 ・・・ 404 ・・・ 405 ・・・ 407 ・・・ 409 ・・・ 410 ・・・ 412 ・・・ 414 ・・・ 415 ・・ 416

10.14 10.15 10.16 10.17 「共有」の作成 (Wrndows) ・ 実行中の lnternet Explorer につなげる・・ Microsoft Outlook の「連絡先」を読む・・ 詳しいシステム情報を得る ( Mac OSX) ・ 1 1 章 1 2 章 ユーザインタフェース・・ 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 11.12 11.13 11.14 11.15 11.16 11.17 11.18 11.19 イントロダクション・・ コンソールでプログレスインジケータを表示する・・ lambda を使わずコールノヾック関数を書く・ tkSimpleDiaIog の関数にデフォルト値や範囲制限を使う・・ inter のリストボックスをドラッグアンドドラッグで並び替えできるようにする・・ 漏 nter でアクセント記号を入力・・ Tkinter で使う GIF をコードに埋め込む・・ 画像のフォーマットを変換する・・ "I 次 inter によるストップウォッチ・・・ スレッドで GUI と非同期 I / O を結合・・ inter で IDLE のツリーウイジェットを利用する・・ 複数の値を入れられる行 (row) を持つだⅨ inter のリストボックス・・ 玉 inter ウイジェット間でジオメトリメソッドやオプションをコピーする・・ lron thon でフェードインするウインドウを作る・・ Python Cocoa GUI の「プログラマティックな」構築・・ Mac OS でユーザに入力させるには・・ Swing と Jython を使って URL のイメージを表示・・ Jython で ImageJ プラグインを実装・・ Ⅸ thon でタブを・・ ftinter でタブを・・・ XML の処理・・ 12.0 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 イントロダクション・・ 整形式 (well-formed) であるかチェックする・・ ある名前空間に属す要素と属性を除く・・ XML 文書の検証 (validate) ・・ Microsoft Excel の XML をパース・・・ XMLDOM ノードのサブツリーからスペースのみのテキストノードを削除・・ XML 文書を thon のオプジェクトツリーに変換・・・ XML 工ンコーディングの自動認識・・ テキストの抽出・・ タグを数える・・・ ー XXiX ・・ 418 ・・ 418 ・・・ 420 ・・ 422 ・・・ 427 ・・ 427 ・・・ 429 ・・・ 431 ・・・ 432 ・・・ 433 ・・・ 435 ・・・ 437 ・・・ 439 ・・・ 442 ・・ 444 ・・ 449 ・・・ 451 ・・・ 455 ・・・ 457 ・・・ 460 ・・・ 461 ・・・ 462 ・・・ 463 ・・・ 465 ・・・ 467 ・・・ 471 ・・・ 471 ・・・ 472 ・・ 474 ・・ 475 ・・・ 476 ・・・ 479 ・・・ 481 ・・・ 482 ・・・ 484 ・・・ 486 目冫欠

目次 12.10 12.11 連続的なテキストイベントを SAX フィルターで結合・・ XML や HTML のパースに MSHTML を使う・・ 1 3 章 1 4 章 ネットワークプログラミング・・ 13.0 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 13.10 13.11 13.12 13.13 13.14 13.15 13.16 13.17 イントロダクション・・ ソケットデータグラムによるメッセージ伝達・・・ Web ドキュメントの取得・・ 、 P サイトリストにフィルタをかける・・ SNTP プロトコルでサーバから時刻を得る・・ HTML メールを送る・・ MIME によるファイル添付・・ MIME マルチパートメッセージのアンパック・・ 添付ファイルの削除・・・ 均 rthon 2.4 の email. FeedParser で解釈されたメッセージを修正・・・ POP3 メールポックスを対話的に調べる・・・ アクテイプでないコンピュータの検知・・ Ⅳロ ' P べースのネットワークモニタ・・・ LDAP サーバへのアクセス・・ IRC に接続してログを記録する・・ ダイナミック IP アドレスのアップデート・・・ プロクシで SSL トンネリング・・・ ポートのフォワード、リダイレクト・・ ウェブプログラミング・・ 14.0 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9 14.10 14.11 14.12 14.13 イントロダクション・・ CGI の動作確認・ CGI スクリプトで URL を扱う・・ CGI でファイルのアップロード・・ ウエプページの存在確認・・ lnternet Explorer のクッキーを探す・・ Jython でサープレットを書く・・ 認証の必要なプロクシを通じた HITPS サイト巡回・・ クッキーの処理・・・ H 下 FP ファイル転送のレジューム・・ H"ITP における content pe の確認・・ テンプレートを使ってデータをウエプイヒ・・ RSS フィードの収集・・ OPML ファイルの生成・・ ・・・ 488 ・・ 491 ・・ 493 ・・・ 493 ・・・ 495 ・・・ 497 ・・・ 498 ・・・ 499 ・・・ 500 ・・ 503 ・・ 505 ・・ 507 ・・・ 509 ・・・ 511 ・・・ 514 ・・ 519 ・・ 522 ・・ 524 ・・ 528 ・・・ 532 ・・・ 534 ・・・ 537 ・・ 537 ・・ 538 ・・ 541 ・・・ 543 ・・・ 544 ・・・ 546 ・・ 547 ・・・ 549 ・・ 552 ・・ 553 ・・ 555 ・・・ 557 ・・・ 560 ・・・ 564

14.14 任意のオプジェクトを Nevow でウエプ化・・ 分散プログラミング・ 1 5 章 付録 A 索引・ 15.0 15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 15.10 15.11 イントロダクション・・ XM し RPC のメソッドコールをする・・ XM し RPC サーバ .. Medusa による XM し RPC ・・ XM し RPC サーバをリモートから終了可能に SimpIeXMLRPCServer の小技いろいろ・・ wxPython で XM し RPC サーバに GUI を・・ Twisted の Perspective Broker を使う・ CORBA サーバとクライアント・・ telnet ⅱ b でリモートログイン・・ SSH でリモートログイン・・ SSL クライアントの認証・・・ Python と日本語処理について・・ A.I A. 2 thon で日本語を使う・・ ソースコードに日本語が使いたい・ ー XXXi ・・ 566 ・・・ 571 目次 ・・・ 605 ・・・ 601 ・・・ 599 ・・・ 599 ・・ 596 ・・ 593 ・・ 590 ・・ 587 ・・・ 584 ・・・ 582 ・・・ 580 ・・ 579 ・・ 577 ・・ 575 ・・ 573 ・・・ 571

奥付

Python クックプック 287 年 6 月 20 日 2 開 9 年 2 月 12 日 著 発 発 訳 印 初版第 1 刷発行 初版第 3 刷発行 Alex Martelli ( アレックス・マーテリ ) 、 maMa れ e Ⅲ venscro れ ( アンナ・マーテリ・レベンスクロフト ) 、 DavidAscher ( ディヴィッド・アッシャー ) 鴨澤眞夫 ( かもさわまさお ) 、當山仁健 ( とうやまよしたけ ) 、 吉田聡はしださとし ) 、吉宗貞紀はしむねさだき ) 、他 行 行 冗 者 者 人 刷 所 兀 テイム・オライリー 株式会社平河工業社 株式会社オライリー ジャノヾン 〒 160 刈 2 東京都新宿区坂町 26 番地 27 Tel ( 03 ) 3356-5227 Fax ( 03 ) 3356-5263 電子メール j 叩 an@oreilly.co.jp 株式会社オーム社 〒 101-8460 東京都千代田区神田錦町 3-1 TeI ( 03 ) 3233- 41 ( 代表 ) Fax ( 03 ) 3233-3440 インテリジェントプラザビル IF printed in J 叩 an ( ISBN97 & 4 ー 873 Ⅱ -276-3 ) 乱本、落丁の際はお取り替えいたします。 本書は著作権上の保護を受けています。本書の一部あるいは全部について、株式会社オライリー ら文書による許諾を得すに、いかなる方法においても無断で複写、複製することは禁じられています。 ・ジャノヾンカ、