萬九郎の硬い船

プログラミング学習記録など

python

『退屈なことはPythonにやらせよう』10章 演習プロジェクト

10章の内容は「デバッグ」で、大いに勉強になった。演習プロジェクトは、バグを含むプログラムをデバッグするというもの。 入力させる値が'表'と'裏'なのに対してプログラム内部では'1'と'0'になっており、入力内容を判定できなくなっていたため、'表'と'裏'…

『退屈なことはPythonにやらせよう』9章 演習プロジェクト

間が空いてしまった。9章の演習プロジェクトは1週間前にやっていたのだが、3つめの演習がすぐには解けずにそのまましばらく放置していた。 これではいかん。とにかく解けるものを解いて先に進みたいので、3つめは後で戻ってきて解くことにする。 1つめは「選…

『退屈なことはPythonにやらせよう』8章 演習プロジェクト

8章に入って、いよいよ扱うプログラムが実践的になってきた。学習したことを応用していろいろ作れそうだ。 8章の演習プロジェクトは3つあって、まずは本に載っている「マルチクリップボード」に削除機能を追加するもの。これは簡単だった。 第1コマン…

pyperclipを使ったクリップボード内のメアド検索:@が[at]などに置き換えられている場合について

『退屈なことはPythonにやらせよう』の7章に、クリップボード内のテキストから(電話番号や)メアドを検索して抜き出す方法というのが載っていた。 サイト上に載っているメアドはスパム避けのために@が[at]などに置き換えられていることも多いので、そういっ…

『退屈なことはPythonにやらせよう』7章 演習プロジェクト

7章の演習プロジェクトは、正規表現を使った2つで、まずは「強いパスワードの検出」。 これは、最初にパスワードの強さテストを1項目ずつやっていく上のプログラムを書いた後でなんかこれだとダサいなと思い、少し調べた上で正規表現の「先読みアサーション…

『退屈なことはPythonにやらせよう』6章 演習プロジェクト

6章の演習プロジェクトは、リストを内包したリストを右揃えのテーブルとして表示させるプログラム。 右揃えの準備として、まず最初にリスト(外側)の長さぶんの0のリストを作り、その0をそれぞれ各リスト(内側)の最大長の値で置き換える。 これは本に載っ…

『退屈なことはPythonにやらせよう』5章 演習プロジェクト

5章の演習プロジェクトは、与えられた辞書形式のデータを「持ち物リスト」として表示するプログラムと、別のリストからその辞書にアイテムを移して辞書を更新するプログラム。 setdefault()メソッドは、第1引数で指定したキーが辞書に存在するかどうかを調べ…

『退屈なことはPythonにやらせよう』4章 演習プロジェクト

4章の演習プロジェクトは2つある。 まず、「カンマ付け」。 これはforループを使わずにカンマ区切りでjoin()する方がシンプルで良いな、と思ったので改良版を作った。 そして、「文字絵グリッド」。 こっちは、本当は与えられたリスト内リストの長さが均一か…

Gistをブログ記事に埋め込んでみる:『退屈なことはPythonにやらせよう』3章 演習プロジェクト

Scrapyのチュートリアルが動かなかったりして心が折れている間に、『退屈なことはPythonにやらせよう』というPythonの人権を無視したタイトルの本を買って、勉強の寄り道をし始めた。 日々の雑務の自動化とPythonの理解を深めることが同時にできれば素晴らし…

Pythonの環境構築をやり直す

以前、使用しているMacのAnaconda環境でScrapyのチュートリアルが動かないという事態になったため、いっそ仮想環境化も含めてPythonの環境構築をやり直すことにした。 以下、Mac OSXでの環境構築のメモ。 Anacondaをアンインストールする https://docs.conti…

Pythonの文字列操作の便利なメソッドについて

Pythonには、文字列操作に便利なメソッドが用意されている。以下のメソッドはそれぞれ、文字列が isalpha():1文字以上の英字のみによる文字列かどうか isalnum():1文字以上の英数字のみによる文字列かどうか isdecimal():1文字以上の数字のみによる文字列…

Pythonの参照について

Pythonのリストや辞書では、それらへの「参照」が変数に格納される。 mame = 3 uma = mame mame = 6 とした場合は、mameに代入された値3がumaにコピーされ、その後でmameに別の値6を代入してもumaの値3は変わらない。 mameとumaは異なる値を格納する異なる変…

Python3でScrapyを使う

『PythonによるWebスクレイピング』には、 残念ながら、Scrapyは、Python2.7では動きますが、Python3.xバージョンはまだリリースされていません。 と書いてあり、ウワアめんどくせえ、これが複数バージョンのPythonを仮想環境で分離するとよいと…

urlparseでURLを分解する/組み立てる

urllib.parseのurlparseを使うと、受け取ったURLを解析して分解したり、組み立て直すことができる。 urllibについては、本の冒頭で「繰り返し出てくるからドキュメントを読んでおけ」とあったとおり、細かい部分は一切説明がないので、メモしておく。 scheme…

なんだかいちいちつまずいてしまう

Wikipediaの日本語URLのエスケープの件でハマったり、『PythonによるWebスクレイピング』を細かい部分まで噛み締めて読み進めようとすると、なんだかいちいちつまずいてしまう。もしかしたら、何かもう少しやさしい参考書を読んだ方がよいのではないか?とい…

Pythonの命名規約について知っておく

BeautifulSoupのドキュメントの中で、classがPythonの予約語であるためclass_という名前で代用する、というのが出てきたが、これはPythonのコーディング規約であるPEP8の中の 関数の引数名が予約語と衝突していた場合、アンダースコアを引数名の後ろに追加す…

関数内でグローバル変数に代入する場合はglobal宣言を使う必要がある

Pythonでは、関数内でグローバル変数に値を代入する場合はglobal宣言を使う必要がある。たとえば a = "何か" def local(): a = "別の何か" print(a) local() print(a) とした場合、local()は"別の何か"を出力する(関数内のaはローカル…

BeautifulSoup4のfind()とfind_all()について理解を深める

BeautifulSoup4のメソッドfind()とfind_all()について、ちゃんとごまかさずに理解しておかないと後々困りそうな気がした。 せっかくなので、ドキュメントの該当部分をちょっと自力で訳してみて知識を定着させようと思う(以下訳文)。 ツリーの検索 Beautifu…

日本語を含むURLでつまづく

本の中で、課題としてWikipedia(英語版)を使ったものが出てきたので、日本版Wikipediaに置き換えてやってみようと思ったところ、URLに日本語が含まれているせいでUnicodeエンコードエラーが起きた。 ググったところ、先人の知恵があったので試してみたが、…

ラムダ式の便利さを理解する

正規表現だけでなく、ラムダ式を使うのもスクレイピングに役立つ。後で勉強すること。

正規表現への苦手意識を克服する

正規表現には苦手意識があった。正確には苦手というより憶えるのが面倒臭く、必要になる場面ではそのたびごとにググって調べ、すぐ忘れてしまう、というパターンである。ただ、人生のこのタイミングでがっつりPythonを学習するにあたって、さすがに避けて通…

cssのclassを手がかりに要素を取得する

スクレイピングで要素を取得する際に、cssのclassが有効活用できる。 たとえば、このブログ(現状ではWordPressのTwenty Fifteenテーマをそのまま使っている)の記事タイトルだけを抜き出したい場合には、 <h2 class="entry-title"> <a h…

例外に備えさせていただく

本の中で、スクレイピング対象のデータフォーマットがひどかったりしてスクレイパーがエラーを起こして止まったときなどに、 Webサイトを作った開発者の名前を(それからおかしなフォーマットも)呪いたくもなるでしょうが、本当に腹が立つのは、そもそもそ…

タプルの何がいいのかを理解する

Pythonのオブジェクトのひとつにタプル(tuple)があり、これは複数の要素の組み合わせをひとつのものとして扱える。具体的には、座標とかを (0, 100) のように、コンマで区切り丸括弧で囲んで作る。シーケンス型であり、インデックスで値を取り出せる。後か…

BeautifulSoupをインストールする

Macの場合、 $sudo easy_install pip でPythonパッケージマネージャーpipをインストールした後 $pip install beautifulsoup4 でBeautifulSoupをインストールする。らしいのだが、自分の環境には既にAnacondaが入っていたので、 Requirement already satisfie…

urllib — URL を扱うモジュール群

urllibは『PythonによるWebスクレイピング』のいろんな場面で使うので、ドキュメントを読んでおくといいらしい。 本の中のURLは英語版だったので、日本語版にリンクを張っておく。本当は英語版で読む習慣をつけたほうがいいんだろうけど。

Pythonの内包表記を書くときにハムラビ法典が邪魔をする

Pythonには内包表記(comprehension)という書き方がある、というのをcodeacademyのPythonコースで知ったわけだが、これはコードが簡潔になるばかりではなく処理も速くなるらしい。処理が速くなる理屈については正直今の自分のレベルではチンプンカンプンな…

『PythonによるWebスクレイピング』を勉強しはじめる

ちょっと前から、情報収集にWebスクレイピングを導入したいなあとボンヤリ考えていたのだが、何を使って実践しようかなと検討していたところ、どうやらO'Reillyから去年出た『PythonによるWebスクレイピング』という本がとても良いらしい、というのを知った…