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

座敷牢日誌

都落ちした元SEがソフトウェアやネット関連のことを書いています

python

Jupyter (iPython) notebook で使用するブラウザを変更する方法

Jupyter (iPython) notebook で使用するブラウザを変更する方法です. ふだん使うブラウザはFirefoxなのですが, vimperator を使っているため, キーバインドが操作性の妨げになってしまうことが多いです. そこで Chromium をJupyterで使うブラウザで指定する…

Python C APIでイテレータを実装する (後編)

PythonのC/C++ APIによるイテレータを実装する話の続きです。 ここにあるコードの多くは、オフィシャルのドキュメントを参考にしています。 1. C や C++ による Python の拡張 — Python 3.4.2 ドキュメント 2. 新しい型を定義する — Python 3.4.2 ドキュメン…

Python C APIでイテレータを実装する (前編)

PythonのC APIでイテレータを実装してみました。 Pythonであればyield を使ったり、__iter__, __next__ を使って実装するものですね。 語義的にジェネレータと区別できてないところがあるかもしれません。 指定した個数だけ素数を返すという機能を実装する例…

Python APIでC言語による拡張モジュールを試した

Pythonのドキュメントの、このあたりの話題を試してみた。 Python インタプリタの拡張と埋め込み — Python 3.4.2 ドキュメント 渡された値が素数かどうかを返す関数 isprime(n) を2通りのモジュールで実装する。 素数判定のコードはWikipediaの記事にあった…

Djangoの管理サイトでオブジェクトの複数形を正しく表示する

Python 3.2 + Django 1.6での話題。 Djangoのモデル名は単数形でつける (慣習的なものだと思うけど)。管理サイトではモデ ルが複数形で表示されるが、モデル名によっては正しくない結果になることがある。 例えば Category というモデルが Categorys と表示…

Python2の map/filter 関数とリスト内包表記のパフォーマンス比較

python 2.x での話。pythonでちょっとした仕事のためにスクリプトを書捨てするとき、 よくリスト内包表記で書く。リストのようなシーケンシャルなデータを処理するために、 age_list = [] for person in people: if person.is_alive: age_list.append(person…

Python2.7でprint関数は (通常は) 使えません

Python3で print は関数として振る舞うようになってるが、Python2.7 では print 文として実装されている。が、関数としても存在する。 # これらはどっちも有効 print 'hello' print('hello') Python2.7で関数として print を使おうとしたときに、構文エラー…

pythonのunittestで標準出力の結果をテストする

unittestモジュールで標準出力する関数をテストしようとした場合、どうしたらいいか調 べてみた。 例えば、次のような関数があったとする。実行すると標準出力に「hello」と出力する。 import sys def testfunc(): sys.stdout.write('hello') この関数が期待…

自分自身のモジュールをターゲットにsetattrする方法

インポートしたモジュールを対象に setattr することができる。 import os setattr(os, 'myname', 'hoge') print(os.myname) # hoge では、モジュール自分自身を対象に setattr するにはどうしたらいいのか、調べてみた。 stackoverflow のトピックスにあり…

Qtの検証用途でPyQt4を導入した

PyQt4を始めてみた。といっても、仕事でQt4を少し扱うことになったので、ちょっとQtのAPIを叩いたりするくらいなら、不慣れなC++ではなくPythonで使えたらいいかも、という程度のあまり積極的ではない理由で。 職場のWindowsPCに対してはRiverbank提供のもの…

「みんなのPython」を読み終えた後にやったらいいんじゃないかと思うこと

Python関連の書籍のなかで「みんなのPython」は特に入門用として人気があるようで、僕 も「みんなのPython 改訂版」を読んで覚えた。この本を読み終えたら何をしたらいいの か、プログラミングの初心者向けに考えてみた。 実際に使ってみる 当たり前の話だけ…

コンソールの画面全体をコントロールするアプリのためのライブラリ「curses」

コンソール上で動作するアプリケーション、例えばvimやemacsや、w3mやrogue(ゲーム)はどうやって作るんだろうー、ずっと気になっていた。まさか出力内容を変えるごとにクリアするわけではないと思うけど。なんと調べればいいのか難しくてすぐに分からなか…

pipでインストール中にエラー「Python.h: そのようなファイルやディレクトリはありません」

pipからurwidというコンソールアプリケーション関連のパッケージをインストールしようとしたら、次のようなエラーが出て失敗した。 Downloading/unpacking urwid Running setup.py egg_info for package urwid Installing collected packages: urwid Running…

「#!/usr/bin/python」と「#!/usr/bin/env python」の違い

公開されているコードで、先頭にインタプリタの指定があった場合、だいたい次のどっちかだ。 「#!/usr/bin/python」 「#!/usr/bin/env python」 見た感じでなんとなく想像はつくけど、どう違うのか調べてみた。pythonのメーリングリストのやり取りで、こんな…

pythonのリストの添字にBoolean

pythonのコードをだら見していて、リストの添字にBooleanを指定しているコードを見つけた。 self._screen_file = [sys.stdout, sys.stderr][params.get('logtostderr', False)] これなんだろうなあと思って調べてみると、要するに「True」は「1」、「False」…

コンソールアプリケーションで進行状況等を出力する……キャリッジ・リターンの話

色々あるコンソールアプリケーションがよくとるやり方で、現在の行の出力内容をどんどん更新していく……といった出力方法がある。例えば、wgetを実行するとダウンロード状況のパーセンテージやインジケータや残り時間が、刻々と更新表示されていく。恥ずかし…

CGIが思ったよりも簡単だった

w3mは「file:///cgi-bin/xxxx.cgi」でcgiスクリプトを動かすことができる。なんか作れたら面白いよなあと思って、最近はCGIのことを調べることが多い。 昔はCGIで動かすことを想定したPerlのスクリプトを配布しているサイトがいっぱいあって、その頃はまだWe…

xvideos.comのFLVファイルのURL(ならびに動画の関連データ)の取得方法

今、使っている端末がプアーなだけでなく、無線LANの回線もかなり細いので、Youtuebやニコ動みたいなストリーミングがほぼ観れない。もちろん、エロ動画サイトも。 ダウンロードしてみるしかないわけで、別サイトのダウンロード用URL抽出サービスを利用する…

pythonでリクエストヘッダーを付与してファイルをダウンロードする

あるサイトで毎日公開されるzipファイルを、シェルスクリプト&cronで取得していたのだが、その端末が無くなってしまったので、スクリプトを新たに書き直すことにした。HTMLソースのスクレイピングにgrepやsedを組み合わせていたが、どうやっていたが忘れてし…

zenityをpythonから使う「PyZenity」

zenityというソフトウェアをよく使う。簡単なダイアログを表示するためのもので、例えば端末上で次のように入力して実行すると、メッセージが通知ダイアログになって出力される。 $ zenity --info --text="ダウンロードが完了しました" 他にもユーザからの入…