読者です 読者をやめる 読者になる 読者になる

人生リアルタイムアタック

当面はPython学習帳

FlaskでもHamlを使う - hamlish-jinja

Flask 最近書いてるんだけれども、今更閉じタグなんて書きたくないんじゃ!ということで、様々HTML Template触った結果最も書きやすかったHamlを使いたい。 ということで hamlish-jinja を使う。 使い方の基本 Flaskのdefault template engineであるjinjaのo…

SSL証明書が正しくないサイトに対してPythonでアクセスする

HTTPSで提供しているサービスのローカル開発環境にPythonでアクセスを試みたらエラーが出た。 Traceback (most recent call last): File "/main.py", line 36, in <module> main() File "/main.py", line 18, in main soup = BeautifulSoup(opener.open(conf['login_</module>…

urllib.request.build_opener に User-agent を指定する

Pythonで要ログインのサービスをスクレイピングをする際にはbuild_openerを利用するが、User-agentも指定する必要があるケースがある。 通常のbuild_opener # coding: utf-8 import http.cookiejar import yaml from bs4 import BeautifulSoup from urllib i…

flake8 で continuation line under-indented for visual indent [E128] が出る時

flake8でコーディングチェックを行っていると、continuation line under-indented for visual indent [E128] が出る時がある。 Vim標準、もしくは jedi.vim 利用時の自動インデントに倣って入力してるつもりだが、flake8では例えば引数などは、第一引数の開…

Pythonのパッケージ管理ファイル

pip freezeを使う。virtualenv と組み合わせて使うとよい。 $ pip freeze beautifulsoup4==4.4.1 flake8==2.4.1 mecab-python3==0.7 pep8==1.5.7 pyflakes==0.8.1 PyYAML==3.11 $ pip freeze > requirements.txt # 現在インストールしているパッケージ一覧を…

Pythonで破壊的ループをする際はリスト全体のコピーをとる

Pythonで以下のような破壊的ループをしようとすると、indexのズレが発生してすべての要素に対して処理が行われないケースがある。 (この例の処理ではリスト内包表記で充分代替可能だったりするが、あくまで例として単一処理にしている。) li = [ { "id": "D0…

Pythonの引数のデフォルト値は一度しか評価されない

先日ハマったのでメモ。 結論 Pythonの引数のデフォルト値は一度しか評価されない。 def func(url, l=[]): … としたい場合には、代わりに def func(url, l=None): if l is None: l = [] … とする。 背景 GitHub APIを叩いて全てのbranch_listを取得しようと…

pyenv利用環境でのnpm installでpython2周りのエラーが出た時

~ $ npm install -g bower /Users/<user_name>/.nvm/versions/node/v4.2.1/bin/bower -> /Users/<user_name>/.nvm/versions/node/v4.2.1/lib/node_modules/bow er/bin/bower bower@1.6.5 /Users/<user_name>/.nvm/versions/node/v4.2.1/lib/node_modules/bower > bufferutil@1.2.1 install /Us</user_name></user_name></user_name>…

Pythonでトークンやユーザー名やパスワードなどの秘匿情報をYAMLに退避させる

ソースコード上に書いたままではマズい情報を退避させる手段 Pythonコード import yaml yaml_dict = yaml.load(open('secret.yaml').read()) user_name, password = yaml_dict['username'], yaml_dict['password'] yamlモジュールがなければ pip install pyy…

Pythonのアンパック代入が便利

Pythonでは複数の変数に纏めて代入可能。 >>> x, y = 1, 2 >>> x, y (1, 2) 右辺はリストやタプルであれば良く、Pythonでタプルは , で表現されるので括弧はあってもなくても良い。 利用例1: リスト要素を纏めて受け取り >>> li = [3, 5] >>> a, b = li >>> …

Pythonで初期値を指定した上で多次元リストを作りたい時

オセロ盤面を生成する時などに、 >>> board = [[0] * 8] * 8 >>> board [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0,…

Vimで特定のファイルタイプのみ最後の空行を消す

PythonのLintツールとしてflake8(pep8 + pyflakes)を利用しているのだが、ファイル末に空行があると W391 blank line at end of file の警告が出るので自動化したくなった。 調べてみたら以下のような知見があったので設定してみた。 qiita.com " delete_las…

Pythonでは単要素のタプルにはカンマを使う

mysql.connector を使ってる際に、 cursor.execute('SELECT * FROM table WHERE hoge = %s', (fuge)) が動かずなんでだろうと思っていたら、 mysql-connector-python/cursor.py at master · mysql/mysql-connector-python に cursor.execute("SELECT * FROM …