銀月の符号

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

Python

Django と JQuery でフォームの処理

JavaScript 再入門から1週間弱。 JQuery で遊べるところまできた。あるフォームの内容を非同期通信するページを Django と JQuery を用いて作成する手順について自分なりに整理してみる。 Ajax 。 フォーム Django でフォームを扱う方法の一つである django.…

乱数生成アルゴリズム Xorshift を random.Random のサブクラスとして実装してみた

すごい乱数生成アルゴリズム「xorshift」 - Pashango’s Blog の Python 最高!! につられて。 random.Random を継承する形で Xorshift アルゴリズムを。なぜつくったのかまったくの謎だけど Python 最高!! だからしかたない。メルセンヌ・ツイスタ (Merse…

Python 札幌第3回 Ustream 参加

随時、更新中。…更新終了。 Python関連読書会 13:20〜14:10 13:20 開始、 14:30 終了。Python チュートリアルの「3.1.4 リスト」から「4.6 関数を定義する」まで。あと None について盛り上がったため 20分くらいオーバー。 NULL およびそれに類するものの動…

manage.py コマンドの追加

Python 札幌第3回開催直前、便乗 Django ネタ。第2回未参加なので既出かも。 manage.py にオリジナルのコマンドを追加する方法について。また、 manage.py shell インタラクティブシェルで実験したいけれど長くなりそう、というときの代わりにも使える。「…

気がつけばファイル操作の話に(前記事、ジェネレータをうまく作れるようになりたい)

昨日の続き。ジェネレータ作ってみたメモだったはずなのにファイル操作のメモになってしまって、タイトルどうしたものか。 既存ファイルを上書きしないコピー、ムーブ(POSIX編) たぶんこう。 O_EXCL で open システムコールしてファイルを上書きしない環境…

メモ、Python札幌・第3回勉強会

Python札幌・第3回勉強会 は 7/12(日)。札幌は遠いので Ustream 中継で。あと 13:00 から 18:00 まで 5 時間きっちり張り付けるかどうか未定。Ust 参加でも ATND に参加登録すべきだったっけ?15時ごろ追記: 参加登録してきた。

ジェネレータをうまく作れるようになりたい

今晩の目的、「同名のファイルが存在しても、重ならないファイル名でコピーをする関数」の作成。仮名 copy_safe 。a\spam.txt, b\spam.txt がすでにあるときに、copy_safe(r'a\spam.txt', r'b\spam.txt') すると b\spam(0).txt という名前でコピーするという…

レシピ追加、ブロック…そんなものは無いけれども

Python Recipe は『Rubyレシピブック 第2版 268の技』が元ネタなので Python にはない、もしくは Python に不要なものもある。「012:関数の呼び出し制限」、「237:汚染モード(taintモード)を使う」、「155:ワンライナでファイルを更新する」、「015:特異メ…

レシピ追加、Pythonのライブラリローダを制御する

『210:Pythonのライブラリローダを制御する』を追加。sys.path, .pth, PYTHONPATH, sys.moduels など。

レシピ追加、名前がぶつからないファイルを作成

「149:名前がぶつからないファイルを作成」を追加。 os.open に os.O_EXCL を含むフラグを与える。

レシピ追加、Pythonスクリプトをデバッグする

『211:pythonスクリプトをデバッグする』を追加。 pdb デバッガの使い方の例を書いてみた。

Re:数値型判定はどうしたらいいのだろう?

「2009-06-20 - Pythonで遊ぶよ - pythonグループ」の以下のコードを見て。「数値型オブジェクトかを判定する、ただし bool 型は除く」という関数です。 def is_numeric(n): return not isinstance(n,bool) and \ (isinstance(n,int) or isinstance(n,long) …

レシピ追加、標準入出力をファイルにつなぎ換える

『169:標準入出力をファイルにつなぎ換える』を追加。通常用途では sys.stdout などを、望みのファイルに結びついているファイルオブジェクトで置き換える。これで十分。 import sys fo = open('spam.txt', 'w') sys.stdout = fo 本当ににつなぎ換えるには o…

レシピ追加、ユーザやグループに関する情報を得る

手元にある、記事を収めた reStructuredText ファイルの数を数えるとちょうど 100 個。つまり自分が書いた Python Recipe の数が 100 個の大台に乗ったということ。1年半もかかっているので仕事が遅い感は否めないが、飽きずに続けられたのはよかったと思っ…

レシピ追加、メソッドを委譲する

『249:メソッドを委譲する』を書き加えた。 __getattr__ をうまくつかうとコード量を減らすことができるというネタあり。あと、『256:クラスメソッドの別名を定義する』も書き加え。といってもこちらはただ代入しただけ。

URL のクエリ要素にあえて情報をもたせる必要はない?

ページ番号などの情報を URL に持たせる時の話。 Django 的には /something/?page=7 のようにクエリ要素を使うのと /something/7/ のような URL はどちらが便利なのか考えてみた。今の時点での結論は「URL ディスパッチャが強力なので /something/7/ でよい…

Django メモ、モデルの継承とマネジャ

Django 1.0 以降のモデルは継承することができるらしい。ということで django.contrib.auth.models.User モデルを継承してみた。 from django.db import models from django.contrib.auth import models as auth_models class MyUser(auth_models.User): foo…

BeautifulSoup と戯れる

HTML 文章を情報源としてデータを構築するときのお供に、 BeautifulSoup 。やはり便利。 テキストに変換 HTML 文章を強引にプレーンテキストに直してみる。 soup2string 呼び出し可能オブジェクト。 >>> from BeautifulSoup import BeautifulSoup >>> html =…

レシピ追加、バイナリサーチを行う

久しぶりの Python レシピ追加、『112:バイナリサーチを行う』。 bisect 組み込みモジュールを使うだけ。未執筆かつ簡単そうなものを探してみたら、これが見つかったのでリハビリがてら。アルゴリズムの勉強のために一から組みたい人は「Python 二分探索」あ…

Firefox のプロファイルフォルダを探す

Firefox のプロファイルフォルダを探す Python の関数 get_profile_path(profile_name=None) を作ったので晒してみる。もう一工夫すれば Thunderbird, SeaMonkey らにも対応できるかも。Firefox 3 の クッキーを読み出そうとしていたときの副産物。クッキー…

レシピ追加、ハッシュの要素を挿入した順に取り出す

『118:ハッシュの要素を挿入した順に取り出す 』投稿。順序を保持する辞書を自作しようとしてたが、 PEP 372 の存在に2日前気づく。そして実装もすでにたくさん存在した。しかも自分のよりもすばらしい出来の。そんなわけでレシピ内容は、それの紹介になっ…

関数に与えられた * 引数、 ** 引数の名前も調べる

関数に与えられた引数の名前を調べる を読んで。 func_code の存在を思い出していました。そして、この方法だと * 引数、 ** 引数の名前が取り出せないので追加を。 inspect モジュールの出番 結論から。inspect.getargspec で得られます。行われているのは …

Windows にてディレクトリのアクセス日時、更新日時を変更する

Python ディレクトリの日付はどうやって変更するの? — lights on zope より。os.utime は Windows 環境ではディレクトリを操作することができないことを知りました。これは指摘されるまで気がつきませんでした。そこで対策を考えてみました。(何か見落とし…

現在進行中、おーぷんMIDIぷろじぇくと、 MIDIData の Python ラッパー作成4

MIDIData の子の親は? 30分前 に存在を知った addressof 関数をさっそく試してみる。 >>> from ctypes import * >>> import mididata._mididata as _mididata >>> import mididata._miditrack as _miditrack >>> data = _mididata.LoadFromSMF('chocho.mid'…

ctypes メモ、ポインタオブジェクト

2つのポインタの指し示す先が同じものかどうか確認する。本来ならば比較するだけのはず。しかし、これを Python 、 ctypes でどう実現するのかが分からなかった。 Python でつくられたポインタオブジェクトはあくまで Python のオブジェクトであって C のポ…

現在進行中、おーぷんMIDIぷろじぇくと、 MIDIData の Python ラッパー作成3

くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパー作成中。現在、 __del__ メソッドでのメモリの自動開放を行えるようにしようとしているが、うまく動作せず。多重開放してしまう。上位のオブジェクトを Delete すると、下位のト…

現在進行中、おーぷんMIDIぷろじぇくと、 MIDIData の Python ラッパー作成2

くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパー作成中。現在、mididata.MIDIData, miditrack.MIDITrack, midievent.MIDIEventクラスの作成が終わり、以下のコードが動くようになったところ。これからテストコードの作成の予定…

現在進行中、おーぷんMIDIぷろじぇくと、 MIDIData の Python ラッパー作成

くずさんのおーぷんMIDIプロジェクト 、 MIDIDataライブラリの Python ラッパーをつくりはじめた。現在 MIDIIO.dll の公開関数を ctypes でラップし終えたところ。 (オリジナルの使用方法)(C言語、MIDIDataライブラリ 公式ガイドブックより) #include <stdio.h> #in</stdio.h>…

おーぷんMIDIぷろじぇくと、なるもの発見

おーぷんMIDIぷろじぇくと を先日発見。これ Python から使えると便利な気がしてきた。気のせいかも? DLL の形式でも公開されているため、とりあえず ctypes つかえばベタなラッパーは何も考えずに書ける。たとえば MIDIIOライブラリならこんな感じ。でもベ…

レシピ追加、多次元配列をループする

「088:多次元配列をループする」 。再帰関数で書いたことはあったけれど、再帰ジェネレータ? で書いたのは初めて。 def traverse_unsafe(iterable): try: # イテレート可能かどうか確認 i = iter(iterable) except TypeError, e: # イテレート不可、データ…