Home > python Archive

python Archive

keyhac で Emacs 風ショートカットを定義する

キーカスタマイズソフト keyhac において、“複数のキー入力へアクションを割り当てる”ことが可能になっていた。要するにこれは、Emacs 風のショートカットを実現するためのものだ。

from keyhac import *

def configure( km ):
    # グローバルキーマップ
    kmg = km.defineWindowKeymap()

    # “切り取り”は C-W に退避させておく
    kmg[ "C-W" ] = "C-X"

    # マルチストローク設定
    kmg[ "C-X" ] = km.defineMultiStrokeKeymap()
    # 開く
    kmg[ "C-X" ][ "C-F" ] = "C-O"
    # 上書き保存
    kmg[ "C-X" ][ "C-S" ] = "C-S"
    # 名前をつけて保存
    kmg[ "C-X" ][ "C-W" ] = "A-F", "A"
    # 終了
    kmg[ "C-X" ][ "C-C" ] = "A-F4"

これにより、Control を押下したまま、XC と順に叩いてウィンドウを閉じることができる。さらに応用として、

Continue reading

【Perl, Python】日本の祝日の一覧を取得する

とかく日本は祝日の多い国である。しかも祝日となる日付は毎年異なり、その法則も他国のように単純なものではない。

2007 年(平成 19 年)からは国民の祝日が合計 15 日となった。これは先進国では最多であり、「ワーカホリック」ともいわれる日本の意外な一面でもある。
http://ja.wikipedia.org/wiki/国民の祝日

Perl の場合

Perl で祝日判定を行うならば Calendar::Japanese::Holiday モジュールが使いやすい。

Calendar::Japanese::Holiday - search.cpan.org
http://search.cpan.org/~kztomita/Calendar-Japanese-Holiday-0.03/lib/Calendar/Japanese/Holiday.pm

Perl 祝日名の取得 - とみぞーノート
http://wiki.bit-hive.com/tomizoo/pg/Perl%20%BD%CB%C6%FC%CC%BE%A4%CE%BC%E8%C6%C0

インストールは次のコマンドを打つだけだ。

Windows(ActivePerl)の場合

C:\> ppm install Calendar::Japanese::Holiday

Linux、Mac OS X 等の場合

$ cpan -i Calendar::Japanese::Holiday

Continue reading

keyhac で簡単なマクロを作ってみる

keyhac を使ってキー配列をいじるスクリプトを紹介してきたが(その 1その 2)このソフトではキーボードやマウスを使ったマクロを書くこともできる。今回は簡単な例として、Putty + GNU Screen での例を書いてみる。

Putty + GNU Screen でウィンドウを簡単に切り替える

GNU Screen で複数のウィンドウを切り替える場合は“コントロールキャラクタを押した後に数字キー”という操作を行う。具体的には、

  1. Control + Z を押す *1
  2. Control + Z を離す。
  3. 3 を押す。

これで 3 番のウィンドウに切り替わる。毎回 Control を離す動作が面倒なのだ。これを、単に Control + 3 だけで切り替わるようにしたい。

config.py(部分)

def configure( km ):
    km_putty = km.defineWindowKeymap( exe_name = u"PUTTY.EXE" )
    for i in xrange( 10 ):
        km_putty[ "C-" + str( i ) ] = km.command_InputKey( "C-Z", str( i ) )

2 行目では特定のプログラム(PUTTY.EXE)でのみ有効なキーマップ(km_putty)を得ている。そして 4 行目がキモ。command_InputKey メソッドは引数に並べたキーを順に押した場合と同じ効果を得るための関数を返す。このスクリプトを使うと、Putty + GNU Screen な環境で Control + 09 を押すと、0 番~ 9 番のウィンドウに切り替わるだろう。

Continue reading

【Python 事始め】404 エラーを補足する

指定された URL からファイルをダウンロードする方法を「【Python 事始め】進捗を表示しながらダウンロードする」に書いたが、ここで使った urllib.urlretrieve 関数はダウンロードできなかった場合(404 エラー等)でも問題なく終了してしまう。これを回避するには次のようにする。

How to catch 404 error in urllib.urlretrieve - Stack Overflow
http://stackoverflow.com/questions/1308542/how-to-catch-404-error-in-urllib-urlretrieve

urllib.FancyURLopenerhttp_error_default メソッドをオーバーライドしたクラスを作成すればよい。

Continue reading

【Perl, Python】シュワルツ変換あるいは優雅なる DSU

【Perl, Python】map、grep、sort の比較」に続き、mapsort を使って高速なソート手法であるシュワルツ変換を書いてみよう。

シャチ泳ぎとシュワルツ変換 - perl-mongers.org
http://perl-mongers.org/2008/05/schwartzian_transform_and_orcish_maneuver.html

Schwartzian transform - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Schwartzian_transform

シュワルツ変換とは、ある配列の要素をそれぞれの属性値に従ってソートする場合、一度属性値を全て計算した配列を作ることでソートを高速化することを言う。……と、言葉で説明してもアレだし、例を挙げてみよう。次のように、九州の各県の人口を表したテキストファイルがあるとする *1

kyushu.txt

エンコーディングは UTF-8 とする。

長崎県 1,478,632 人
佐賀県 866,369 人
福岡県 5,049,908 人
熊本県 1,842,233 人
大分県 1,209,571 人
宮崎県 1,153,042 人
鹿児島県 1,753,179 人
沖縄県 1,361,594 人

これを人口の少ない順に並べ直し、次のような出力を得たい。

佐賀県 866,369 人
宮崎県 1,153,042 人
大分県 1,209,571 人
沖縄県 1,361,594 人
長崎県 1,478,632 人
鹿児島県 1,753,179 人
熊本県 1,842,233 人
福岡県 5,049,908 人

Continue reading

【Perl, Python】map、grep、sort の比較

Perl で言う、mapgrepsort を Python で表すと次のようになる。

Are Python list comprehensions the same thing as map/grep in Perl? - Stack Overflow
http://stackoverflow.com/questions/1418912/are-python-list-comprehensions-the-same-thing-as-map-grep-in-perl

Continue reading

【Python 事始め】進捗を表示しながらダウンロードする

ファイルをダウンロードしてローカルに保存するスクリプトを書いてみる。ただ保存するだけではつまらないので進捗状況を表示してみよう。

ファイルのダウンロードには urllib モジュールuriretrieve 関数を使う。

11.4 urllib -- URL による任意のリソースへのアクセス
http://www.python.jp/doc/2.4/lib/module-urllib.html

Continue reading

【Python 事始め】終了処理を追加する

スクリプトにバグがあった場合、Python はエラーメッセージを出力して終了することになるが、py2exe で exe 化している場合、そのメッセージは一瞬で消えてしまって読むことが出来ない。そういうときは終了処理を追加して一旦待って貰おう。この用途には atexit モジュールを使う。

使用例

次のようなスクリプトを実行すると勿論エラーで落ちるが、exe 化しているとウィンドウすら表示されないのでメッセージが読めない。

# coding=utf-8
# ゼロ除算エラーになる
1 / 0

そこで、スクリプトの最初に次のような処理を追加する。

# coding=utf-8
import atexit

def goodbye():
    """
    終了処理
    """
    raw_input( u"Enter キーを押してください".encode( "cp932" ) )

atexit.register( goodbye )

# ゼロ除算エラーになる
1 / 0

このスクリプトを py2exe で exe 化して実行すると、次のように表示される。

100505-0002.png

【Python 事始め】コマンドプロンプトで色付き文字を使う

コマンドプロンプトで色付き文字を使うにはこのモジュールがいいみたい。Perl で言うなら Win32::Console::ANSI参考)に当たる。

WConio -- Windows CONsole I/O for Python
http://newcenturycomputers.net/projects/wconio.html

color.py

# coding=utf-8
from WConio import *

# おまじない。元の設定を保存しておく。
old_setting = gettextinfo()[4] & 0x00FF

textcolor( GREEN )
print u"これは緑です"
textcolor( LIGHTRED )
print u"これは明るい赤です"
textbackground( DARKGRAY )
print u"背景を灰色にしました"
textattr( old_setting )
print u"元に戻りました"
print u"何かキーを押してください"
getch()

実行例

100429-0001.png

WConio.textcolor() で前景色、WConio.background() で背景色を指定できる。WConio.getch() を使えば一文字だけ受け付けるプロンプトも作れる。上記リンクには他にもいろいろな関数が紹介されているので使ってみよう。

【Python 事始め】YAMLで書いた設定ファイルを読み込む

Python で YAML を扱うためにはサードパーティのモジュールが必要だ。Perl で言う cpan コマンドに当たるのは easy_install というものらしい。

easy_installとは
http://morchin.sakura.ne.jp/effective_python/easy_install.html

モジュールのインストール

ブラウザで ez_setup.py をダウンロードして実行する。

C:\> python ez_setup.py

これで Python をインストールしたフォルダ直下の Scripts フォルダに easy_install.exe という実行ファイルが作成される。

Python で YAML を扱うモジュールは PyYAML というのがいいみたい *1 。インストールは次のコマンドをたたくだけだ。

C:\> D:\Python26\Scripts\easy_install PyYAML

Continue reading

Index of all entries

Home > python Archive

Feeds
CC Licence

Creative Commons License

このブログはクリエイティブ・コモンズでライセンスされています。

Ferret アクセス解析
W3C Validation

I ♥ validator

Return to page top