退屈なことはPythonにやらせよう(オマージュ)
学部1年のとき読んで、Pythonすげ〜プログラミングすげ〜ってなったけっこう好きな本
以下、目次とメモ
退屈なことはPythonにやらせよう
Have Python do boring things
・何千個ものファイルを移動し、名前を変え、フォルダに分ける
・オンラインフォームをキーボードを使わずに入力する
・Webサイトが更新されたら自動的にファイルをダウンロードしたり、テキストをコピーしたりする
・コンピュータから通知メールを送ってもらう
・Excelのスプレッドシートを更新・整形する
・電子メールをチェックして、事前に用意しておいた返事を送信する
などの作業ができるようになる
第一部 Pythonプログラミングの基本
Pythonの基礎、フロー制御、関数、リスト、辞書とデータ構造、文字列の操作
第二部 処理の自動化
・正規表現を使ったパターンマッチ
正規表現は検索するパターンを指定する
Wordなどでも正規表現を使って検索や置換ができる
最後にはテキストから電話番号と電子メールアドレスを自動抽出するプログラムを書く
1 正規表現を用いないテキストパターン検索
めんどい
2 正規表現を用いてテキストパターンを検索する
正規表現はテキストのパターンの記述法である
例えば\dは数字1文字を表す
電話番号にマッチする正規表現は
\d{3}-\d{3}-\d{4}とかくことができる
Pythonの正規表現関数はすべてreモジュールの中にある
re.compile()に正規表現パターンを表す文字列を渡すと、Regexパターンオブジェクトが返ってくる
mo = phone_num_regex.search()
mo.group()
3 正規表現によるパターンマッチの続き
()でくくるとグループ分けができる
mo.group(1)
mo.groups()
|を使うと複数のパターンにマッチする
4 貪欲マッチと非貪欲マッチ
5 findall()メソッド
6 文字しゅうごう
7 独自に文字集合を定義する
8 キャレットとドル記号
9 ワイルドカード文字
10 正規表現に用いる記号のまとめ
11 大文字・小文字を無視したマッチ
12 sub()メソッドを用いて文字列を置換する
13 複雑な正規表現を管理する
14 re.IGNORECASEとre.DOTALLととre.VERBOSEを組み合わせる
15 電話番号と電子メールアドレスの抽出
16 まとめ
・ファイルの読み書き
1 ファイルとファイルパス
全てのOSで動作するプログラムを書こうと思ったら両者に対応するようにos.path.join()を使うべき
os.path.joinはファイル操作関数に渡して用いるようなフルパスのファイル名を作るのに便利である
ルートフォルダから始まらないファルめいやパス名はカレントディレクトリの下にあると仮定される
os.makedirs()はフルパスで指定したフォルダに必要な中間フォルダも作成してくれる
2 os.pathモジュール
os.path.abspath()
os.path.relpath(path, start)
os.path.dirname()
os.path.basename()
os.path.getsize(path)
os.listdir(path)
os.path.getsize()
os.listdir()
ディレクトリに含まれるファイルの合計サイズを求めたい時はこれを組み合わせる
Pythonの関数は存在しないパスを渡すとエラーになって異常終了してしまうので、パスが存在するかどうか判定する関数がある
os.path.isfile()
os.path.isdir()
os.path.exists()
existを使えば、フラッシュメモリーやDVDの接続もチェックできる
3 ファイルの読み書きの方法
ここまでで、読み書きするファイルの場所を指定するのは苦ではなくなっているはず
バイナリファイルは直接読み書きできない
バイナリファイルを扱うモジュールとして、shelveモジュールが存在する
Pythonでファイルを読み書きするには
1 open()でFileオブジェクト取得
2 File オブジェクトのread()やwrite()メソッドを呼び出し読み書き
3 Fileオブジェクトのclose()オブジェクトを呼び出してファイルを閉じる
pythonのopen()のデフォルトモードは読み込みだが、これに依存したくなければ第二引数にrやwを指定することもできる
open()の戻り値はFileオブジェクトである
file.read()
file.readlines()
読み込みモードで開いたファイルに書き込むことはできない
ファイルに書き込むにはプレーンテキストを書くモードもしくはプレーンテキストを追記するモードでファイルを開く必要がある
どちらにせよ、第一引数に渡したファイルが存在しなければ新たに空のファイルが作成される
ファイルをclose()で閉じ忘れると、ファイル内容が壊れることがある
write()メソッドは行末に改行文字を追加しないので、自分で指定する必要がある
4 shelveモジュールを用いて変数を保存する
shelveモジュールを用いると、Pythonプログラムの中の変数をシェルフというバイナリファイルとして保存することができる
ハードディスクに保存したデータはあとで変数に復元することができる
また、shelfにもkeysとvaluesメソッドが存在する
5 pprint.pformat()を用いて変数を保存する
pprint.pformat()を用いると、.pyファイルに書き込める文字列を取得できる
このファイルは独自のモジュールとしてインポートでき、その中に保存された変数をいつでも使うことができるようになる
6 ランダムな問題集ファイルを作成する
47問の4択を35通り作る
問題の選択肢は正解1つとランダムな誤答3つがあり順番はランダム
問題集は35このテキストファイル
解答集も35このテキストファイル
できた!
7 マルチクリップボード
クリップボードには一度にひとつのテキストしか保持できないので、コピペしたいテキストが何種類かある場合に、複数のテキストの断片を取っておくためのPythonプログラムを作る
mcb.pyw
pywという拡張子をつけるとPythonを実行するときにターミナルウィンドウを表示しない
py mcb.pyw save spamのように実行すると現在のクリップボードをspamに紐付けて保存
py mcb.pyw spamでテキストをクリップボードに復元できる
・sys.argvからコマンドライン引数を読み出す
・クリップボードを読み書きする
・シェルフファイルを読み書きする
が必要
pyperclip
sys
・ファイル管理
1 shutilモジュール
2 ディレクトリツリーを渡り歩く
3 米国日付を欧州日付に変更
4 フォルダをZIPファイルにバックアップする
5 まとめ
・デバッグ
1 例外を起こす
2 トレースバックを文字列として受け取る
3 アサート
4 ログをとる
5 IDLEのデバッガ
6 まとめ
・Webスクレイピング
1 webbrowserモジュールを用いる
2 requestモジュールを用いてWebサイトからファイルをダウンロードする
3 HTML
4 BeautifulSoupモジュールを用いてHTML解析
5 Google検索
6 全てのXKCDコミックをダウンロードする
7 seleniumモジュールを用いてブラウザを制御する
8 まとめ
・Excelスプレッドシートの操作
1 Excel文書
2 openpyxlモジュールをインストールする
3 Excel文書を読み込む
4 スプレッドシートからデータを読み込む
5 Excel文書を書き出す
6 スプレッドシートを更新する
7 セルのフォントスタイルを設定する
8 Fontオブジェクト
9 数式
10 行と列を調整する
11 グラフ
12 まとめ
・PDFとWord文書の操作
1 PDF文書
2 多数のPDFから指定したページを結合する
3 Word文書
4 まとめ
・CSVとJSONデータの操作
1 csvモジュール
2 CSVファイルから見出しを削除する
3 JSONとAPI
4 jsonモジュール
5 現在の天気予報データを取得する
6 まとめ
・時間管理、タスクのスケジューリング、プログラム起動
1 timeモジュール
2 数の四捨五入
3 スーパーストップウォッチ
4 datetimeモジュール
5 Pythonの時間関数まとめ
6 マルチスレッド
7 マルチスレッド板XKCDダウンローダー
8 Pythonから他のプログラムを実行する
9 シンプルなカウントダウンアプリ
10 まとめ
・電子メールとSMSの送信
1 SMTP
2 メールを送信する
3 IMAP
4 IMAPを使ってメールを取得・削除する
5 会費リマインダーメールを送る
6 私にSMSを送ってモジュール
7 まとめ
・画像の操作
1 コンピュータ画像の基礎
2 Pillowで画像を操作する
3 ロゴを追加する
4 画像に描画する
5 まとめ
・GUI自動化によるキーボードとマウスの制御
人間のようにコンピューターを操作する
制御不能のGUIオートメーションを止める単純な方法はログアウトすること
1 pyautoguiをインストール
2 うまく進めるには
3 マウス移動を制御する
4 マウスは今どこに
5 画面を操作する
6 mouseNowを拡張
7 画像認識
8 キーボードを制御
9 PyAutoGUI関数まとめ
10 自動フォーム入力
11 まとめ