google-code-prettify

ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2009-02-12

vimのpython用インデント設定

pythonでは、インデントはタブではなくスペースが推奨されている。
.pyファイル開いた時のインデントは、以下のように設定すれば良い。

~/.vim/ftplugin/python.vimを作り、内容を以下のようにする。(windowsの場合は、$HOME/vimfiles/ftplugin/python.vim)
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=80
setlocal smarttab
setlocal expandtab
setlocal smartindent


あと、.vimrcに以下を書いておくと便利。
autocmd BufRead *.py set smartindent cinwords=if,elif,
else,for,while,try,except,finally,def,class

2008-03-26

Nokia 705NKで撮影した画像をBluetoothでLinuxへ転送する

Nokia 705NKで撮影した画像をBluetoothでLinuxへ転送する

携帯内のC:/Data/Images/とE:/Images/以下の全ての画像をPCに転送するスクリプト。

本当はこのスクリプトを、
「携帯が近付いたときに、自動で実行する」
としたいのだけど、どうすればよいのだろう?

2008-01-27

Pythonクックブック

今さらだけど、Pythonクックブック。
Pythonを習得しようと思ったら、この本ははずせない。



プログラミング言語を習得するには、基本的な文法や、プリミティブな型を覚える他に、以下のような事を学ばねばならない。

1. API仕様書などを読むだけではわからない(気付かない)、使い方のコツや思わぬ使い方を知る
2. どんなモジュールやクラスが提供されているかを知る
3. 自分に馴染みのない概念(オブジェクト指向とか、クロージャとか、yieldとか)を学ぶ

Pythonクックブックには、1.が詰まっている。しかも、良質なコードが。
Pythonの初級者からレベルアップするには、Pythonクックブックが一番の近道だと思う。
(と、初級者の私が言うのも変だが)

2008-01-11

pythonのthreading.local()の動作

threading.local()の使い方のメモ。

threading.local()は、以下のように考えるとわかりやすい。
仮に、オプジェクトの内部構造を見るinternalという関数があったとしよう。

threading.local()を呼ぶと、ディクショナリを持った新しいオプジェクトが作られる。
>>>tss1 = threading.local()
>>>internal(tss1.__dict__)
{}


tss1に値をセットすると、自動的に、スレッド番号をキーとしたサブディクショナリへ値がセットされる。仮にスレッド番号が9056とすると、
>>>tss1.val = 10
>>>internal(tss1.__dict__)
{9056: {'val': 10}}
>>>tss1.val
10


違うスレッドから値valをセットすると、違うサブディクショナリへセットされる。
>>>tss1.val = 20
>>>internal(tss1.__dict__)
{9056: {'val': 10}, 1026: {'val', 20}}
>>>tss1.val
20


threading.local()は、呼ぶたびに別のディクショナリが作られる。
>>>tss1 = threading.local()
>>>tss1.val = "hello"
>>>tss2 = threading.local()
>>>tss2.val = "world"
>>>tss1.val
hello
>>>tss2.val
world



以下の解釈は間違い。
・threading.local()は、最初からどこかに存在するTSSを指すポインタを返す。よって、何度threading.local()を呼んでも、同じデータにアクセスする事ができる。
・threading.local()は、毎回同じグローバルなオブジェクトを返してくる。

2007-10-25

IEのお気に入りをMarkdownに変換する

いろいろなサイトのURLをIEのお気に入りで管理していたのだが、破綻したので、Markdownで管理する事にした。

で、以下、IEのお気に入り(.url)をMarkdown書式にするscript。
なぜかファイル名に「≫」が入っているとopenに失敗するので、try/exceptを入れている。なぜだろう。


import os

def mywalk(arg, dirname, fnames):
#print "dir=", dirname
first = True
for f in fnames:
if f.endswith('.url') or f.endswith('.URL'):
if first:
print ''
print dirname[2:] # remove './'
print '==============='
print ''
first = False
#for l in open(os.path.join(dirname, f), 'rb'):
try:
for l in open(dirname + '/' + f, 'rb'):
l = l.strip()
if l.startswith('URL=') or l.startswith('url='):
print '- [%s](%s)' % (f[0:-4], l[4:]) # remove '.url' and 'url='
except:
print "cannot open %s" % (dirname + '/' + f)

os.path.walk('./', mywalk, None)

2007-08-08

テキストファイルでToDoを管理するためのscript

オンラインも含めて、いろいろなToDo管理ソフトを使ってきたが、結局はプレーンテキストが一番という結論に達した。

で、テキストファイルでToDoを管理するためのscriptを作った。
text/todo

2007-03-15

subversionで、commitしたファイルでコミットメールの宛先を変える

Subversionで1つのリポジトリを複数のプロジェクトで使っている場合、見たくもない別プロジェクトのcommitメールが来てしまう事がある。

そこで、commitしたファイルによってcommitメールの宛先を変える事ができるpost-commitスクリプトを作った。

使い方
・リポジトリのrootに、conf.txtという名のファイルを作る(commitしておく)。
・conf.txtには、正規表現とメールアドレスをスペース区切りで書く。

conf.txtの例
.* all@example.com
trunk bob@example.com peter@example.com
crypto alice@example.com bob@exampel.com lupin3@example.com

ちなみに、以前はrubyで作ったが、今回はpythonで作り直した。
ちなみに、rubyバージョンのpost-commitが欲しい人は、こちらの方がデキが良いので、そっちを使いましょう。

2007-03-01

pythonで文字列のエンコーディングを推測する

mozillaの文字列推測のコードをpythonに移植した物。
Universal encoding detector

via python ML

2007-02-16

Pydb - Extended Python Debugger

gdbに近いコマンドセットを持つpython用デバッガ
python標準のpdb.pyより、いろいろな事ができるようだ。

pkgsrcでは、wip/pydbにある。

2007-01-24

amazonのwishlistの内容とASINを携帯で見る

私は気になった本をamazonのwishlistに入れておき、後日本屋に行って中身を確認するという事を良くやる。
amazonのwishlistには不便な点がいくつかあって、
  • PCでwishlistを印刷しようと思っても、ASIN(ISBN)が表示されないので、本屋で本を検索しにくい
  • 携帯でamazonのページを見ても、wishlistを見る事ができない(と思う)

そこで、wishlistの内容とASINを携帯に適したフォーマットで表示してくれるCGIを作った。
python + web.pyで作成。

欲しいという人がもし居たら、公開します。

07/01/26追記:
wishlist IDを入力すれば、(公開されている)どのwishlistでも表示できるようにしました。
自分のwishlist IDを調べるには、
  • wishlistのページから「このリストをメールで友達に知らせる」をクリックする
  • そのページのURLの後ろの「wishlist&id=393I2T9TLIDPL」の場合、393I2T9TLIDPLがwishlist IDです

私のwishlistを表示した場合

2006-11-10

さくらインターネットでweb.py

さくらインターネットのレンタルサーバーでweb.pyを使えるように設定した。

  1. web.pyのホームページのGET IT: web.pyの所からweb.pyをダウンロード。

  2. web.pyを$HOME/lib/python/の下に置いておく。

  3. flupをダウンロード。

  4. $ python setup.py install --home=${HOME} --forceで、flupをインストール。flupが無いとCGIが動作しないので注意。

  5. .htaccessに、AddHandler cgi-script .pyを書いておく(これはいらないかも)。

  6. 以下のファイルを$HOME/www/a.pyとして作成しておく。パーミッションは755で。

    #!/usr/bin/env python

    import sys

    sys.path.append('/home/ユーザー名/lib/python')

    import web

    urls = (
    '/', 'view'
    )

    class view:
    def GET(self):
    print "\r\n"
    print "Hello, world!"
    web.internalerror = web.debugerror



    if __name__ == '__main__':
    web.run(urls, web.reloader)

  7. webブラウザで、http://サーバーのアドレス/a.py/にアクセス。最後の/を忘れずに。

  8. Hello, Worldと表示されればOK。

参考にしたサイト:
「さくらのレンタルサーバ」で Python 外部モジュールを使う

さくらインターネットでmercurial

さくらインターネットのレンタルサーバーにmercurialをインストールした。
READMEに書いてある通りにしただけだが、一応メモ。
$ python setup.py install --home=${HOME} --force
の後、.bashrc(もちろんbashの場合)に
export PYTHONPATH=${HOME}/lib/python
とするだけ。

2006-10-20

Tracの各ページに情報の新鮮度を表示する


Trac0.8.1の各ページに、最終更新日からの経過時間を*の個数で表すようにした。*は1か月ごとに一つ減ってゆく。

まず、templates/wiki.csを以下のように書き換え、modtime関数(関数なのか?)を呼ぶようにする(真ん中の行を追加した)。

<?cs if wiki.action == "view" ?>
<div class="wikipage">Freshness: <?cs var:wiki.modtime ?></div>
<div id="searchable"><?cs var:wiki.page_html ?></div>


trac/Wiki.pyのWikiModuleクラスのrenderメソッドの最後に、以下のコードを追加する。

# add modtime
cursor = self.db.cursor()
cursor.execute ('SELECT time FROM wiki '
'WHERE name=%s AND version=%s'
'ORDER BY version ASC',
self.page.name, self.page.version)
res = cursor.fetchall()
if not res:
self.req.hdf.setValue('wiki.modtime', 'unknown')
else:
time_cnt = 10 - ((int(time.time()) - int(res[-1][0])) / (86400*30))
if time_cnt < 0: time_cnt = 0
time_str = '*' * time_cnt + "</font>"
if time_cnt < 3:
time_str = '<font color="#cc0000">' + time_str + "(rotten)"
elif time_cnt < 6:
time_str = '<font color="#cccc00">' + time_str + "(old)"
else:
time_str = '<font color="#00cc00">' + time_str + "(fresh)"
self.req.hdf.setValue('wiki.modtime', time_str)

Trac0.8.1で作ったので、最新のTracでは動作しないかも。

06/10/23:
resがnilだった時(本文が無い時)にエラーしてしまうのを修正。

2006-09-05

pkgsrcのデフォルトのpythonのバージョンを変える

pkgsrcで使うpythonのバージョンは、pkgsrc/lang/python/pyversion.mkで

PYTHON_VERSION_DEFAULT?= 23

のように指定されている。
2.4でpkgsrcをビルドしたいなら、mk.confに

PYTHON_VERSION_DEFAULT=24

と書いておけば良い。
(現在のpkgsrcでのデフォルトバージョンは既に2.4になっている)