銀月の符号

Python 使い見習いの日記・雑記

Python

レシピ追加、ファイルをロックする

今日は「161:ファイルをロックする」を書いた 。ページは存在したのになぜか白紙だったのを昨日見つけたので。1年以上この状態だったのだけど放置されていた模様。書いてて気づいたのは、ヘルプファイルの『Windows NT Files -- Locking』にあるコード例が…

てってってー、ぱいそんっててー

H.Hiro さんのプログラム言語「てってってー」 のインタプリタを Python の勉強がてら実装してみました。能力不足かつ5時間未満のコードゆえに、まだまだ誤動作するかもしれません。サンプルにあったコード(下記)が動くところまでは確認しました。 {「て…

traceback の情報を残しつつ別の型の例外を送出

触発されて、例外の再送出について調べてみました。 Pythonでcatchした例外を無加工でもう一度投げなおしたい場合 - 西尾泰和のはてなダイアリー tracebackをログに残す場合のお約束コード - methaneのブログ 例外を捕らえたものの処理しきらないで再送出す…

『065:文字列を最大nバイトに切り詰める』は codecs モジュールまかせでもできた

終わった…あっさりと。文字コードと戯れていたオレってなんだったんだろう。 # coding: utf-8 from codecs import getincrementaldecoder, iterencode def _iter_mbchar(iterator, encoding, errors='strict', **kwargs): decoder = getincrementaldecoder(e…

『065:文字列を最大nバイトに切り詰める』は codecs モジュールまかせでもできるような気がしてきた

codecs の Python ソースにこのようなものをみつけた。 def iterdecode(iterator, encoding, errors='strict', **kwargs): """ Decoding iterator. Decodes the input strings from the iterator using a IncrementalDecoder. errors and kwargs are passed …

「XOR をとるコーデック」のファクトリ

codecs モジュールには先日までは知らなかった、 IncrementalDecoder により一字ずつデコードする機能があった。これにはまだまだ知らないで損している機能があるような気がして、もうすこしさわってみることにした。まずはコーデックの自作と登録から。それ…

Python レシピの増量、ひと段落

http://lightson.dip.jp/zope/ZWiki/FrontPage/recentchanges 。25 個以上追加して満足。 067:文字列を最大n桁に切り詰める East Asian Width 使用版。 # coding: utf-8 from unicodedata import east_asian_width _east_asian_width = { 'Na': 1, 'N': 1, '…

ディスクの空き容量を調べる、 Linux, Windows 両対応

seko さん、 bonlife さんに続き、ディスクの空き容量を調べる Python コードの作成に挑戦しました。動作確認は Windows と Debian にて行っています。disk_free(path) 関数は Unix の df コマンドのように path を含むファイルシステムの総容量、使用済み量…

メールアドレスの正規表現

Perlメモ メールアドレスの正規表現 にある長大な正規表現 $mail_regex 。初めて見たのはたぶん 4 年前だと思う。そのときの衝撃はそれは大きなもので。メールアドレスにマッチする正規表現の作成は非常に難しいということを知った。この後 RFC 2822 とかも…

レシピ追加、インデントを変更する

「058:インデントを変更する」新規作成。Ruby レシピブックの正規表現を利用したコードを Pytoon に移植。 Ruby のブロック付き String#gsub は便利と感じた。しかし Python にブロックは無く、ここで一工夫。 re.sub 関数の第 2 引数には関数が入れられるの…

レシピ追加、演算子

「002:演算子」を新規追加。しかし、劣化 Python リファレンスマニュアル再びの予感(まて

レシピ編集、文字列を日時に変換する

Python レシピ「198:文字列を日時に変換する」を編集。ここで Ruby が 'H21.01.29 0:21' のような和暦を読み込めることを知る。 irb(main):001:0> require "date" => true irb(main):002:0> DateTime.parse('H21.01.29 0:21').to_s => "2009-01-29T00:21:00+…

レシピ追加、文字をエスケープする/エスケープを外す

Python レシピ「053:文字をエスケープする/エスケープを外す」 を新規作成。

レシピ編集、リテラル

今日は「001:リテラル」を書いた。Language Reference を読み返すいい機会だった。たかがリテラル、されどリテラル。正しく説明するのは難しく、また手間もかかる。でも自分なりに調査・検証した分、理解が深まるのも事実。

レシピ追加、XMLを解析する

書こう書こうと考えてはいたもののなかなか形にならなかった「078:XMLを解析する」。とりあえず投稿。 レシピというより Python 製 XML パーサーの単なる紹介になったような…。ほとんどが標準モジュールだし。より有用な文にするには、使用例をもっと増やす…

レシピ追加、メソッド呼び出し

今日は 009:メソッド呼び出し を書いた。しかし、基本的なものほど説明が難しい。Python あまり使わない人が書き方に迷ったときに読む文章、という主旨を思い出しつつ書き直しを繰り返したところ、最終的にあの文章になった。文書力が足りない、欲しいと思う…

Python で Windows のレジストリ操作

PythonRecipe に久しぶりに書き込みしてきた。「214:Windowsレジストリにアクセスする」というネタ。_winreg モジュールの EnumValue の使いにくさはガチ。Value ってもろ単数形…。持っている値を列挙するのが役目なのに、名前のとおり値を1つずつしか得ら…

Pythonの四則演算とビット論理演算の速度を自分でも測ってみた

bit 単位でデータが詰め込まれているバイナリデータを眺める機会があったので、なんとなく「Python ビット演算」でググッてみた。そんな日のこと。すると Python の int 型における各種演算速度を実測した人を発見。Pythonの四則演算とビット論理演算の速度 …

Python 2.6 の _winreg.ExpandEnvironmentStrings を ctypes で

Python 2.6 より _winreg モジュールに追加された ExpandEnvironmentStrings 関数。REG_EXPAND_SZ 型のレジストリ値のように % で囲まれた環境変数を展開するというもの。ソースコードを見ると PC/_winreg.c の 1159 行目からの PyExpandEnvironmentStrings …

形態素解析エンジン MeCab 0.97 とその Python バインディングを MinGW でビルドする

環境は Windows XP, Python 2.5.2(公式サイトのインストーラーより)。この環境に MinGW, msys をセットアップし、これを用いて MeCab 0.97 をビルド。その後 MeCab Python バインディングをビルドした際の手順についてのメモ。 のまえにバイナリが欲しい方…

AquesTalk Win版 でゆっくり Python していってね

aquestalk2.py aquestalk2.py version 0.1.1 (2010/3/26) 履歴 2010/3/26 Aquestalk2 対応版 aquestalk2.py を作成。 aquestalk.py aquestalk.py version 0.1.1 (2010/3/26) aquestalk.py version 0.1 (2008/11/8) 履歴 2010/3/26 機能に変更はなし。 versio…

raw ユニコード文字列リテラルの罠

とある Windows のファイルパスらをリテラル表記していたら UnicodeError で怒られるパスがみつかったので数分立ち止まらざるをえなかった。で、発覚したのがこれ。raw ユニコード文字列リテラルでは「バックスラッシュの直後の u, U に注意」。 >>> ur'\u' …

urllib2 で HEAD 要求

urllib2 モジュールで http プロトコルを使用する際選べる(選ばれる)メソッドは GET か POST 。では HEAD で十分な時は http モジュールレベルまで戻らなくてはいけないのだろうか? もしくは問答無用で GET して対象サーバーにはごめんなさいで済ませるの…

日本 Python ユーザ会のドキュメントが 2.5 に対応したよ

http://www.python.jp/doc/release/lib/lib.html をリロードしたら Python 2.5 対応に変わったのを目撃。翻訳チームの方々、ご苦労様です。これで ctypes とか xml.etree が日本語で読めるように。まぁ nightly のほうなら前から読めたけれど、ありがたいこ…

URL と相対 URL をくっつける

URL と相対 URL をくっつける関数を作ろうとしたら、すでにあった罠。 urlparse モジュールの urljoin 関数。 >>> urlparse.urljoin('http://foo.jp/bar/index.html', '../img/baz.png') 'http://foo.jp/img/baz.png'

PyOpenGL でメタセコモデルビューア作成、停滞中

.mqo ファイルの読み込みと、頂点データを処理して表示するところまで完了。自分ののんびりまったりペースにがっくし。とはいえ、真っ白ながら姿形が表示できるようになったのだから、あと頂点の色情報と、テクスチャに対応すればそれっぽいものが見えるはず…

そして Python Code Reading 05 へ

inspect モジュールを予習。明日は 05 だっ!

【いまさら】Python Code Reading 04 資料アップ【遅いよ】

Python Code Reading 04 資料を Up しました。しかし OOo Impress の PDF エクスポートで文字化けしたので今は .odp ファイルのままとなっています…。 OOo Impress の PDF エクスポートで文字化け 原因と解決策を探し中。原因はフォントが埋め込まれていない…

PyOpenGL + PIL でテクスチャ貼り

www.komoto.org の OpenGL入門 sample09 を PyOpenGL と PIL で再現。動作させるにはこの2つのライブラリと texture2.ppm が必要。テクスチャを作成するには PIL で画像を読み込んで、 tostring() でバイト列に直してから glTexImage2D にわたせば OK 。つま…

PyOpenGL と Pygame 2日目(何も理解していない)

(9/23 オリジナル似コードを追加しました。)チラシの裏レベル。唐突に 3D でゲームもどき作ってみたくなってから2日経過。トライフォース回してみた。PyOpenGL + Pygame で 描くのと Pygame で 2D 描くのとの違いは pygame.display.set_mode の第2引数に…