退屈なことはPythonにやらせよう 第2版

―ノンプログラマーにもできる自動化処理プログラミング

[cover photo]
TOPICS
Programming , Python
発行年月日
PRINT LENGTH
744
ISBN
978-4-87311-927-4
原書
Automate the Boring Stuff with Python, 2nd Edition
FORMAT
Print PDF EPUB
Ebook
4,290円
Ebookを購入する
Print
4,290円

一歩先行くハイパフォーマンスなビジネスパーソンからの圧倒的な支持を獲得し、自作RPA本の草分けとして大ヒットしたベストセラー書の改訂版。劇的な「業務効率化」「コスト削減」「生産性向上」を達成するには、単純な繰り返し作業の自動化は必須です。本書ではWordやExcel、PDF文書の一括処理、Webサイトからのダウンロード、メールやSMSの送受信、画像処理、GUI操作といった日常業務でよく直面する面倒で退屈な作業を、Pythonと豊富なモジュールを使って自動化します。今回の改訂では、GmailやGoogleスプレッドシートの操作、Pythonと各種モジュールの最新版への対応、演習等を増補しています。日本語版では、PyInstallerによるEXEファイルの作成方法を巻末付録として収録しました。

関連ファイル

目次

訳者まえがき
まえがき

第I部 Pythonプログラミングの基礎

1章 Pythonの基本
    1.1 式をインタラクティブシェルに入力する
    1.2 整数、浮動小数点数、文字列型
    1.3 文字列の連結と複製
    1.4 変数に値を格納する
        1.4.1 代入文
        1.4.2 変数名
    1.5 最初のプログラム
    1.6 プログラムを分析する
        1.6.1 コメント
        1.6.2 print()関数
        1.6.3 input()関数
        1.6.4 ユーザー名を表示する
        1.6.5 len()関数
        1.6.6 str()、int()、float()関数
    1.7 まとめ
    1.8 演習問題

2章 フロー制御
    2.1 ブール型
    2.2 比較演算子
    2.3 ブール演算子
        2.3.1 二項ブール演算子
        2.3.2 not演算子
    2.4 ブール演算子と比較演算子を組み合わせる
    2.5 フロー制御の構成要素
        2.5.1 条件式
        2.5.2 コードのブロック
    2.6 プログラム実行
    2.7 フロー制御文
        2.7.1 if文
        2.7.2 else文
        2.7.3 elif文
        2.7.4 whileループ文
        2.7.4 .1 やっかいなwhileループ
        2.7.5 break文
        2.7.6 continue文
        2.7.7 forループとrange()関数
    2.8 モジュールをインポートする
        2.8.1 from import文
    2.9 sys.exit()関数を用いてプログラムを早期に終了する
    2.10 短いプログラム:数当てゲーム
    2.11 短いプログラム:じゃんけんゲーム
    2.12 まとめ
    2.13 演習問題

3章 関数
    3.1 パラメータのあるdef文
    3.2 戻り値とreturn文
    3.3 None値
    3.4 キーワード引数とprint()関数
    3.5 呼び出しスタック
    3.6 ローカルスコープとグローバルスコープ
        3.6.1 ローカル変数はグローバルスコープから使えない
        3.6.2 ローカルスコープでは他のローカルスコープの変数を使えない
        3.6.3 グローバル変数はローカルスコープから読める
        3.6.4 同じ名前のローカル変数とグローバル変数
    3.7 グローバル文
    3.8 例外処理
    3.9 短いプログラム:ジグザグ
    3.10 まとめ
    3.11 演習問題
    3.12 演習プロジェクト
        3.12.1 コラッツ数列
        3.12.2 入力の妥当性検証

4章 リスト
    4.1 リスト型
        4.1.1 インデックスを指定してリストから要素を取り出す
        4.1.2 負のインデックス
        4.1.3 スライスを用いてリストから部分リストを取得する
        4.1.4 len()関数を用いてリストの長さを取得する
        4.1.5 インデックスを用いてリスト中の値を変更する
        4.1.6 リストの連結とリストの複製
        4.1.7 del文を用いてリストから値を削除する
    4.2 リストを使ってみる
        4.2.1 forループとリストを組み合わせる
        4.2.2 inとnot in演算子
        4.2.3 複数代入法
        4.2.4 リストにenumerate()関数を用いる
        4.2.5 リストにrandom.choice()とrandom.shuffle()を用いる
    4.3 累算代入演算子
    4.4 メソッド
        4.4.1 index()メソッドを用いてリストから値を検索する
        4.4.2 append()メソッドとinsert()メソッドを用いてリストに値を追加する
        4.4.3 remove()メソッドを用いてリストから値を削除する
        4.4.4 sort()メソッドを用いてリスト中の値をソートする
        4.4.5 reverse()メソッドでリストを逆順にする
    4.5 例題プログラム:リストを用いたマジック8ボール
    4.6 シーケンス型
        4.6.1 ミュータブル、イミュータブルなデータ型
        4.6.2 タプル型
        4.6.3 list()関数とtuple()関数を使って型を変換する
    4.7 参照
        4.7.1 同一性とid()関数
        4.7.2 参照を渡す
        4.7.3 copyモジュールのcopy()関数とdeepcopy()関数
    4.8 短いプログラム:Conwayのライフゲーム
    4.9 まとめ
    4.10 演習問題
    4.11 演習プロジェクト
        4.11.1 カンマ付け
        4.11.2 コイン投げ連続解析
        4.11.3 文字絵グリッド

5章 辞書とデータ構造
    5.1 辞書型
        5.1.1 辞書とリストの比較
        5.1.2 keys()、values()、items()メソッド
        5.1.3 キーや値が辞書に存在するかどうか判定する
        5.1.4 get()メソッド
        5.1.5 setdefault()メソッド
    5.2 整形表示
    5.3 データ構造を用いて実世界の物体をモデル化する
        5.3.1 三目並べのボード
        5.3.2 辞書とリストの入れ子
    5.4 まとめ
    5.5 演習問題
    5.6 演習プロジェクト
        5.6.1 チェスの辞書の検証プログラム
        5.6.2 ファンタジーゲームの持ち物リスト
        5.6.3 ファンタジーゲームの持ち物リスト用にリストから辞書に移す関数

6章 文字列の操作
    6.1 文字列を操作する
        6.1.1 文字列リテラル
        6.1.2 文字列のインデックスとスライス
        6.1.3 文字列に対するinとnot in演算子
    6.2 文字列の中に文字列を挿入する
    6.3 便利な文字列メソッド
        6.3.1 upper()、lower()、isupper()、islower()メソッド
        6.3.2 isX()メソッド
        6.3.3 startswith()メソッドとendswith()メソッド
        6.3.4 join()とsplit()メソッド
        6.3.5 partition()メソッドで文字列を分割する
        6.3.6 rjust()、ljust()、center()メソッドを用いてテキストを揃える
        6.3.7 strip()、rstrip()、lstrip()メソッドを用いて空白文字を除去する
    6.4 ord()とchr()で文字コードを扱う
    6.5 pyperclipモジュールを用いて文字列をコピー&ペーストする
    6.6 プロジェクト:マルチクリップボードによる自動メッセージ
        6.6.1 ステップ1:プログラムの設計とデータ構造
        6.6.2 ステップ2:コマンドライン引数を扱う
        6.6.3 ステップ3:正しいフレーズをコピーする
    6.7 プロジェクト:Wikiで箇条書きのマークアップ
        6.7.1 ステップ1:クリップボードからコピーする
        6.7.2 ステップ2:行を分割して「*」を追加する
        6.7.3 ステップ3:変更した行を結合する
    6.8 短いプログラム:ピッグ・ラテン
    6.9 まとめ
    6.10 演習問題
    6.11 演習プロジェクト
        6.11.1 表の表示

第II部 処理の自動化

7章 正規表現を使ったパターンマッチ
    7.1 正規表現を用いないテキストパターン検索
    7.2 正規表現を用いてテキストパターンを検索する
        7.2.1 Regexオブジェクトを生成する
        7.2.2 Regexオブジェクトとマッチする
        7.2.3 正規表現マッチのまとめ
    7.3 正規表現によるパターンマッチの続き
        7.3.1 丸カッコを用いたグルーピング
        7.3.2 縦線を使って複数のグループとマッチする
        7.3.3 疑問符を用いた任意のマッチ
        7.3.4 アスタリスクを用いた0回以上のマッチ
        7.3.5 プラスを用いた1回以上のマッチ
        7.3.6 波カッコ{}を用いて繰り返し回数を指定する
    7.4 貪欲マッチと非貪欲マッチ
    7.5 findall()メソッド
    7.6 文字集合
    7.7 独自に文字集合を定義する
    7.8 キャレット^とドル記号$
    7.9 ワイルドカード文字
        7.9.1 ドットとアスタリスクであらゆる文字列とマッチする
        7.9.2 ドット文字を改行とマッチさせる
    7.10 正規表現に用いる記号のまとめ
    7.11 大文字・小文字を無視したマッチ
    7.12 sub()メソッドを用いて文字列を置換する
    7.13 複雑な正規表現を管理する
    7.14 re.IGNORECASEとre.DOTALLとre.VERBOSEを組み合わせる
    7.15 プロジェクト:電話番号と電子メールアドレスの抽出
        7.15.1 ステップ1:電話番号用の正規表現を作る
        7.15.2 ステップ2:電子メールアドレスの正規表現を作る
        7.15.3 ステップ3:クリップボードのテキストを検索する
        7.15.4 ステップ4:検索結果を1つの文字列にまとめてクリップボードに移す
        7.15.5 プログラムを実行する
        7.15.6 類似プログラムのアイデア
    7.16 まとめ
    7.17 演習問題
    7.18 演習プロジェクト
        7.18.1 日付の検出
        7.18.2 強いパスワードの検出
        7.18.3 正規表現を用いたstrip()メソッド

8章 入力検証
    8.1 PyInputPlusモジュール
        8.1.1 キーワード引数min、max、greaterThan、lessThan
        8.1.2 キーワード引数blank
        8.1.3 キーワード引数limit、timeout、default
        8.1.4 キーワード引数allowRegexes、blockRegexes
        8.1.5 inputCustom()に自作の検証関数を渡す
    8.2 プロジェクト:バカを何時間も忙しくさせておく方法
    8.3 プロジェクト:掛け算クイズ
    8.4 まとめ
    8.5 演習問題
    8.6 演習プロジェクト
        8.6.1 サンドイッチメーカー
        8.6.2 自作の掛け算クイズ

9章 ファイルの読み書き
    9.1 ファイルとファイルパス
        9.1.1 Windowsのバックスラッシュ、macOSやLinuxのスラッシュ
        9.1.2 / 演算子でパスを連結する
        9.1.3 カレントディレクトリ
        9.1.4 ホームディレクトリ
        9.1.5 絶対パスと相対パス
        9.1.6 os.makedirs()関数を用いて新しいディレクトリを作る
        9.1.7 絶対パスと相対パスを操作する
        9.1.8 ファイルパスの一部を取得する
        9.1.9 ファイルサイズとディレクトリ内容を調べる
        9.1.10 globパターンでファイルリストを扱う
        9.1.11 パスを検査する
    9.2 ファイルの読み書きの方法
        9.2.1 open()関数を用いてファイルを開く
        9.2.2 ファイルの内容を読み込む
        9.2.3 ファイルを書き込む
    9.3 shelveモジュールを用いて変数を保存する
    9.4 pprint.pformat()関数を用いて変数を保存する
    9.5 プロジェクト:ランダムな問題集ファイルを作成する
        9.5.1 ステップ1:問題データを辞書に記述する
        9.5.2 ステップ2:問題集のファイルを作り問題をシャッフルする
        9.5.3 ステップ3:問題と選択肢を作成する
        9.5.4 ステップ4:問題集と解答集ファイルに内容を書き出す
    9.6 プロジェクト:更新可能なマルチクリップボード
        9.6.1 ステップ1:コメントとシェルフの設定
        9.6.2 ステップ2:キーワードに紐づけてクリップボードの内容を保存する
        9.6.3 ステップ3:キーワード一覧と、キーワード内容を読み込む
    9.7 まとめ
    9.8 演習問題
    9.9 演習プロジェクト
        9.9.1 マルチクリップボードを拡張する
        9.9.2 文章発生装置
        9.9.3 正規表現検索

10章 ファイル管理
    10.1 shutilモジュール
        10.1.1 ファイルやディレクトリをコピーする
        10.1.2 ファイルやディレクトリを移動したり名前を変更したりする
        10.1.3 ファイルやディレクトリを完全に削除する
        10.1.4 send2trashモジュールを用いて安全に削除する
    10.2 ディレクトリツリーを渡り歩く
    10.3 zipfileモジュールを用いてファイルを圧縮する
        10.3.1 ZIPファイルを読み込む
        10.3.2 ZIPファイルを展開する
        10.3.3 ZIPファイルを作成したり追加したりする
    10.4 プロジェクト:米国式日付を欧州式日付に変換する
        10.4.1 ステップ1:米国式日付用の正規表現を作る
        10.4.2 ステップ2:ファイル名から日付の部分を識別する
        10.4.3 ステップ3:新しいファイル名を作りファイルの名前を変更する
        10.4.4 類似プログラムのアイデア
    10.5 プロジェクト:ディレクトリをZIPファイルにバックアップする
        10.5.1 ステップ1:ZIPファイル名を決める
        10.5.2 ステップ2:新しいZIPファイルを作る
        10.5.3 ステップ3:ディレクトリツリーを渡り歩いてZIPファイルに追加する
        10.5.4 類似プログラムのアイデア
    10.6 まとめ
    10.7 演習問題
    10.8 演習プロジェクト
        10.8.1 選択コピー
        10.8.2 巨大なファイルを探す
        10.8.3 連番の飛びを埋める

11章 デバッグ
    11.1 例外を起こす
    11.2 トレースバックを文字列として受け取る
    11.3 アサート
        11.3.1 信号シミュレーションにアサートを用いる
    11.4 ログ出力
        11.4.1 loggingモジュールを用いる
        11.4.2 print()関数でデバッグしないようにしよう
        11.4.3 ログレベル
        11.4.4 ログを無効化する
        11.4.5 ファイルへログ出力する
    11.5 Muのデバッガ
        11.5.1 継続
        11.5.2 ステップイン
        11.5.3 ステップオーバー
        11.5.4 ステップアウト
        11.5.5 停止
        11.5.6 足し算プログラムをデバッグする
        11.5.7 ブレークポイント
    11.6 まとめ
    11.7 演習問題
    11.8 演習プロジェクト
        11.8.1 コイン投げゲームのデバッグ

12章 Webスクレイピング
    12.1 プロジェクト:webbrowserモジュールを用いたmapIt.py
        12.1.1 ステップ1:URLを検討する
        12.1.2 ステップ2:コマンドライン引数を処理する
        12.1.3 ステップ3:クリップボード内容を扱いブラウザを起動する
        12.1.4 類似プログラムのアイデア
    12.2 requestsモジュールを用いてWebサイトからファイルをダウンロードする
        12.2.1 requests.get()関数を用いてWebページをダウンロードする
        12.2.2 エラーをチェックする
    12.3 ダウンロードしたファイルをハードドライブに保存する
    12.4 HTML
        12.4.1 HTMLについて学習するには
        12.4.2 ざっとおさらい
        12.4.3 WebページのソースHTMLを見る
        12.4.4 ブラウザの開発者ツールを開く
        12.4.5 開発者ツールを用いてHTML要素を検索する
    12.5 bs4モジュールを用いてHTMLを解析する
        12.5.1 HTMLからBeautifulSoupオブジェクトを生成する
        12.5.2 select()メソッドを用いて要素を見つける
        12.5.3 要素の属性からデータを取得する
    12.6 プロジェクト:検索結果をすべて開く
        12.6.1 ステップ1:コマンドライン引数を取得し検索ページをリクエストする
        12.6.2 ステップ2:結果をすべて取得する
        12.6.3 ステップ3:検索結果をWebブラウザで開く
        12.6.4 類似プログラムのアイデア
    12.7 プロジェクト:すべてのXKCDコミックをダウンロードする
        12.7.1 ステップ1:プログラムを設計する
        12.7.2 ステップ2:Webページをダウンロードする
        12.7.3 ステップ3:コミック画像を見つけてダウンロードする
        12.7.4 ステップ4:画像を保存し前のコミックを見つける
        12.7.5 類似プログラムのアイデア
    12.8 seleniumモジュールを用いてブラウザを制御する
        12.8.1 Seleniumでブラウザを制御する
        12.8.2 ページの要素を見つける
        12.8.3 ページをクリックする
        12.8.4 フォームを記入して送信する
        12.8.5 特殊なキーを送信する
        12.8.6 ブラウザのボタンをクリックする
        12.8.7 Seleniumの詳細情報
    12.9 まとめ
    12.10 演習問題
    12.11 演習プロジェクト
        12.11.1 コマンドライン電子メーラー
        12.11.2 画像サイトのダウンローダー
        12.11.3 2048
        12.11.4 リンクの検査

13章 Excelスプレッドシートの操作
    13.1 Excel文書
    13.2 openpyxlモジュールをインストールする
    13.3 Excel文書を読み込む
        13.3.1 OpenPyXLを用いてExcelドキュメントを開く
        13.3.2 Workbookからシートを取得する
        13.3.3 シートからセルを取得する
        13.3.4 列の文字と番号を相互変換する
        13.3.5 シートから複数の行と列を取得する
        13.3.6 ワークブック、シート、セル
    13.4 プロジェクト:スプレッドシートからデータを読み込む
        13.4.1 ステップ1:スプレッドシートのデータを読み込む
        13.4.2 ステップ2:データ構造を追加する
        13.4.3 ステップ3:結果をファイルに書き出す
        13.4.4 類似プログラムのアイデア
    13.5 Excel文書を書き出す
        13.5.1 Excel文書を作成して保存する
        13.5.2 シートを追加・削除する
        13.5.3 セルに値を書き込む
    13.6 プロジェクト:スプレッドシートを更新する
        13.6.1 ステップ1:更新する情報のデータ構造を組み立てる
        13.6.2 ステップ2:すべての行を調べて価格を更新する
        13.6.3 類似プログラムのアイデア
    13.7 セルのフォントスタイルを設定する
    13.8 Fontオブジェクト
    13.9 数式
    13.10 行と列を調整する
        13.10.1 行の高さと列の幅を設定する
        13.10.2 セルの結合と解除
        13.10.3 ウィンドウ枠の固定
    13.11 グラフ
    13.12 まとめ
    13.13 演習問題
    13.14 演習プロジェクト
        13.14.1 掛け算の表を作成する
        13.14.2 空行を挿入する
        13.14.3 行と列の入れ替え
        13.14.4 テキストファイルからスプレッドシートに変換する
        13.14.5 スプレッドシートからテキストファイルに変換する

14章 Google Sheetsの操作
    14.1 EZSheetsをインストールする
        14.1.1 認証情報とトークンファイルの取得
        14.1.2 認証情報ファイルを無効化する
    14.2 Spreadsheetオブジェクト
        14.2.1 スプレッドシートの作成、アップロード、一覧
        14.2.2 スプレッドシートの属性
        14.2.3 スプレッドシートをダウンロードする
        14.2.4 スプレッドシートを削除する
    14.3 Sheetオブジェクト
        14.3.1 データを読み書きする
        14.3.2 シートを作成・削除する
        14.3.3 シートをコピーする
    14.4 Google Sheetsの割り当てを操作する
    14.5 まとめ
    14.6 演習問題
    14.7 演習プロジェクト
        14.7.1 Google Formsのデータをダウンロードする
        14.7.2 スプレッドシートを他の形式に変換する
        14.7.3 スプレッドシートの間違いを見つける

15章 PDFと Word文書の操作
    15.1 PDF文書
        15.1.1 PDFからテキストを抽出する
        15.1.2 PDFの暗号を解く
        15.1.3 PDFを作成する
    15.2 プロジェクト:多数のPDFから指定したページを結合する
        15.2.1 ステップ1:すべてのPDFファイルを探す
        15.2.2 ステップ2:PDFを開く
        15.2.3 ステップ3:ページを追加する
        15.2.4 ステップ4:結果を保存する
        15.2.5 類似プログラムのアイデア
    15.3 Word文書
        15.3.1 Word文書を読み込む
        15.3.2 .docxファイルから全テキストを取得する
        15.3.3 ParagraphとRunオブジェクトにスタイルを設定する
        15.3.4 デフォルトでないスタイルを使ってWord文書を作成する
        15.3.5 Runの属性
        15.3.6 Word文書を書き出す
        15.3.7 見出しを追加する
        15.3.8 改行と改ページを追加する
        15.3.9 図を追加する
    15.4 Word文書からPDFを作成する
    15.5 まとめ
    15.6 演習問題
    15.7 演習プロジェクト
        15.7.1 PDFをまとめて暗号化
        15.7.2 Word文書による特製招待状
        15.7.3 総当たり方式のPDFパスワード解除

16章 CSVファイルとJSONデータの操作
    16.1 csvモジュール
        16.1.1 readerオブジェクト
        16.1.2 forループでreaderオブジェクトからータを読み出す
        16.1.3 writerオブジェクト
        16.1.4 キーワード引数delimiterとlineterminator
        16.1.5 DictReaderとDictWriterオブジェクト
    16.2 プロジェクト:CSVファイルから見出しを削除する
        16.2.1 ステップ1:各CSVファイルをループする
        16.2.2 ステップ2:CSVファイルを読み込む
        16.2.3 ステップ3:CSVを書き出す
        16.2.4 類似プログラムのアイデア
    16.3 JSONとAPI
    16.4 jsonモジュール
        16.4.1 loads()関数を用いてJSONを読み込む
        16.4.2 dumps()関数を用いてJSONを書き出す
    16.5 プロジェクト:現在の天気予報データを取得する
        16.5.1 ステップ1:コマンドライン引数から地名を取得する
        16.5.2 ステップ2:JSONデータをダウンロードする
        16.5.3 ステップ3:JSONデータを読み込み天気予報を表示する
        16.5.4 類似プログラムのアイデア
    16.6 まとめ
    16.7 演習問題
    16.8 演習プロジェクト
        16.8.1 ExcelからCSVへの変換

17章 時間管理、タスクのスケジューリング、プログラム起動
    17.1 timeモジュール
        17.1.1 time.time()関数
        17.1.2 time.sleep()関数
    17.2 数の四捨五入
    17.3 プロジェクト:スーパーストップウォッチ
        17.3.1 ステップ1:時間計測の準備をする
        17.3.2 ステップ2:経過時間を表示する
        17.3.3 類似プログラムのアイデア
    17.4 datetimeモジュール
        17.4.1 timedeltaデータ型
        17.4.2 特定の日付まで一時停止する
        17.4.3 datetimeオブジェクトを文字列に変換する
        17.4.4 文字列をdatetimeオブジェクトに変換する
    17.5 Pythonの時間関数のまとめ
    17.6 マルチスレッド
        17.6.1 スレッドの対象関数に引数を渡す
        17.6.2 並行処理問題
    17.7 プロジェクト:マルチスレッド版XKCDダウンローダー
        17.7.1 ステップ1:関数を使うようにプログラムを改造する
        17.7.2 ステップ2:スレッドを作成して開始する
        17.7.3 ステップ3:すべてのスレッドが終了するのを待つ
    17.8 Pythonから他のプログラムを実行する
        17.8.1 Popenにコマンドライン引数を渡す
        17.8.2 タスクスケジューラ、launchd、cron
        17.8.3 PythonでWebサイトを開く
        17.8.4 他のPythonスクリプトを実行する
        17.8.5 既定のアプリでファイルを開く
    17.9 プロジェクト:シンプルなカウントダウンプログラム
        17.9.1 ステップ1:カウントダウン
        17.9.2 ステップ2:音声ファイルを再生する
        17.9.3 類似プログラムのアイデア
    17.10 まとめ
    17.11 演習問題
    17.12 演習プロジェクト
        17.12.1 ストップウォッチの整形
        17.12.2 Webコミックダウンローダをスケジュール

18章 電子メールやSMSの送信
    18.1 Gmail APIを用いてメールを送受信する
        18.1.1 Gmail APIを有効にする
        18.1.2 Gmailアカウントからメールを送信する
        18.1.3 Gmailアカウントからメールを読む
        18.1.4 Gmailアカウントからメールを検索する
        18.1.5 添付ファイルをダウンロードする
    18.2 SMTP
    18.3 メールを送信する
        18.3.1 SMTPサーバーに接続する
        18.3.2 SMTPに"Hello"メッセージを送信する
        18.3.3 TLS暗号化の開始
        18.3.4 SMTPサーバーにログインする
        18.3.5 メールを送信する
        18.3.6 SMTPサーバーから切断する
    18.4 IMAP
    18.5 IMAPを使ってメールを取得・削除する
        18.5.1 IMAPサーバーに接続する
        18.5.2 IMAPサーバーにログインする
        18.5.3 メールを探す
        18.5.4 メールを取得して既読マークを付ける
        18.5.5 生のメッセージからメールアドレスを取得する
        18.5.6 生のメッセージから本文を取り出す
        18.5.7 メールを削除する
        18.5.8 IMAPサーバーからの接続を切断する
    18.6 プロジェクト:会費リマインダーメールを送る
        18.6.1 ステップ1:Excelファイルを開く
        18.6.2 ステップ2:未払い会員を調べる
        18.6.3 ステップ3:カスタマイズしたリマインダーメールを送信する
        18.6.4 Twilioを使ってSMSを送る
        18.6.5 Twilioアカウントにサインアップする
        18.6.6 SMSを送信する
    18.7 プロジェクト:「私にSMSを送って」モジュール
    18.8 まとめ
    18.9 演習問題
    18.10 演習プロジェクト
        18.10.1 雑用ランダム割り当てメーラー
        18.10.2 傘のリマインダー
        18.10.3 自動退会機
        18.10.4 メールを使ってコンピュータを制御する

19章 画像の操作
    19.1 コンピュータ画像の基礎
        19.1.1 色とRGBA値
        19.1.2 座標と矩形タプル
    19.2 Pillowで画像を操作する
        19.2.1 Imageオブジェクトを操作する
        19.2.2 画像を切り抜く
        19.2.3 画像のコピー&ペースト
        19.2.4 画像サイズを変更する
        19.2.5 画像を回転・反転する
        19.2.6 ピクセルを変更する
    19.3 プロジェクト:ロゴを追加する
        19.3.1 ステップ1:ロゴ画像を開く
        19.3.2 ステップ2:全ファイルをループして画像を開く
        19.3.3 ステップ3:画像をサイズ変更する
        19.3.4 ステップ4:ロゴを追加して変更を保存する
        19.3.5 類似プログラムのアイデア
    19.4 画像に描画する
        19.4.1 図形を描画する
        19.4.2 テキストを描画する
    19.5 まとめ
    19.6 演習問題
    19.7 演習プロジェクト
        19.7.1 章のプロジェクトの改造と修正
        19.7.2 ハードドライブの写真ディレクトリを探す
        19.7.3 カスタム座席カード

20章 GUI自動化によるキーボードとマウスの制御
    20.1 pyautoguiモジュールをインストールする
    20.2 macOSのアクセシビリティを設定する
    20.3 うまく進めるには
        20.3.1 一時停止とフェールセーフ
        20.3.2 ログアウトしてすべてを終了する
    20.4 マウス移動を制御する
        20.4.1 マウスを移動する
        20.4.2 マウスの位置を取得する
    20.5 マウス操作を制御する
        20.5.1 マウスをクリックする
        20.5.2 マウスをドラッグする
        20.5.3 マウスホイールを操作する
    20.6 マウス移動を計画する
    20.7 画面を操作する
        20.7.1 スクリーンショットを撮る
        20.7.2 スクリーンショットを解析する
    20.8 画像認識
    20.9 ウィンドウの情報を取得する
        20.9.1 アクティブウィンドウを取得する
        20.9.2 他のウィンドウの取得方法
        20.9.3 ウィンドウを操作する
    20.10 キーボードを制御する
        20.10.1 仮想キーボードから文字列を送信する
        20.10.2 キーの名前
        20.10.3 キーボードを押下・解放する
        20.10.4 ホットキーの組み合わせ
    20.11 GUI自動化スクリプトの準備をする
    20.12 PyAutoGUI関数のまとめ
    20.13 プロジェクト:自動フォーム入力
        20.13.1 ステップ1:手順を調べる
        20.13.2 ステップ2:全体構成
        20.13.3 ステップ3:データ入力を始める
        20.13.4 ステップ4:ドロップダウンメニューやラジオボタンを処理する
        20.13.5 ステップ5:フォームを送信して待つ
    20.14 メッセージボックスを表示する
    20.15 まとめ
    20.16 演習問題
    20.17 演習プロジェクト
        20.17.1 忙しそうに見せる
        20.17.2 クリップボードを使ってテキスト入力欄を読み出す
        20.17.3 インスタントメッセンジャーのボット
        20.17.4 ゲームを操作するボットのチュートリアル

付録A サードパーティーモジュールのインストール
    A.1 pipツール
    A.2 サードパーティーモジュールをインストールする
    A.3 Muエディタ用にモジュールをインストールする

付録B Pythonスクリプトの実行
    B.1 端末ウィンドウでプログラムを実行する
    B.2 Windows上でPythonスクリプトを実行する
    B.3 macOSでPythonスクリプトを実行する
    B.4 UbuntuでPythonスクリプトを実行する
    B.5 アサートを無効にしてPythonを実行する

付録C 演習問題の解答
    C.1 1章  Pythonの基本
    C.2 2章  フロー制御
    C.3 3章  関数
    C.4 4章  リスト
    C.5 5章  辞書とデータ構造
    C.6 6章  文字列の操作
    C.7 7章  正規表現を使ったパターンマッチ
    C.8 8章  入力検証
    C.9 9章  ファイルの読み書き
    C.10 10章  ファイル管理
    C.11 11章  デバッグ
    C.12 12章  Webスクレイピング
    C.13 13章  Excelスプレッドシートの操作
    C.14 14章  Google Sheetsの操作
    C.15 15章  PDFとWord文書の操作
    C.16 16章  CSVファイルとJSONデータの操作
    C.17 17章  時間管理、タスクのスケジューリング、プログラム起動
    C.18 18章  電子メールやSMSの送信
    C.19 19章  画像の操作
    C.20 20章  GUI自動化によるキーボードとマウスの制御

付録D PyInstallerによる実行ファイル作成
    D.1 ツールの作成
    D.2 実行ファイルの作成

索引

コラム目次
   間違っても気にしない!テキストと数字の等価性
   ==と=の違い
   無限ループに陥ったら?
   TrueやFalseとみなされる値
   モジュール名を上書きしないように
   ブラックボックスとしての関数
   Pythonのインデント(字下げ)ルールの例外
   Python 3.7の順序付き辞書
   Muの外でPythonスクリプトを実行する
   章のプロジェクト
   UNICODEエンコーディング
   HTMLを解析するのに正規表現を使わない
   やっかいなPDF形式
   PythonでSMSを受信する
   CAPTCHAとコンピュータ倫理