トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Python
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ 下準備


___

■ 文字コード

ASCII 以外の文字コードを スクリプトファイルに含めるときは その文字コードをインタープリタに知らせる必要がある。 ( エンコーディング宣言という ) #! の次の行に文字コードを指定する。 このファイルは SJIS で書かれてるよー!
    # -*- coding: sjis -*-
この宣言でファイル内の文字が utf8 でエンコードされているという扱いになる。
    # -*- coding: utf8 -*-
___

■ 実行可能ファイルにする

UNIX, Cygwin 上で実行する場合はシェルスクリプト同様に ファイルの先頭にインタープリタのパスを記述することで実行可能なファイルになる。
    #! /usr/bin/python
    # coding: sjis
Windows にインストールしたインタープリタを利用する
    #! c:/Python27/python.exe
    # coding: sjis
___

■ 文字列(string)




    文字列型のデータをつくるには'', "" 共に使える
    "aaa" 
    'aaa'

    # " を3つで囲むと改行込みで表現できる。
    """ 
    test
    test
    ""

    # 連続した文字列リテラルは連結される
    "aaa" "bbb"
    # 文字列で分割してリストを返す ( Token )
    "aaa_bbb_ccc".split( "_" )

    # 連結
    print "aaa" + "bbb";

    # 繰り返し
    print "aaa " * 5;


    # 文字列型に変換
    str(14)

    # 部分文字列は スライス表記でする
    s = "abc";

    # 各文字をインデックスで指定する
    s[0]
    # 後ろから 1 番目
    s[-1]

    # 文字列の数
    len( s );

    # 文字列の置換
    print "aaa".replace( "aa", "b" );
    


    # 3文字より後
    s[3:]

    print ( "str = " + str( 14 ) )
___

■ tolower . toupper

    # 子文字にする
    "AAA".lower()

    # 大文字にする
    "aaa".upper()
___

■ 日本語のあつかい


  python が内部で扱う文字コードを unicode という。

  unicode を生成するには u を文字列の前につける。
  s = u"あああ";
具体的な文字コードに byte 列にするには encode を使う。
  sjis = s.encode( "sjis" );
元に戻すには decode() をする。
  s = sjis.decode();
___

■ unicode

    u"abc"
文字列を格納するデータ型。 世界中の文字をひとつのコード値に対応づける。 unicode でない場合は 256 個のコード値を文字体系ごとに割りなおす必要がある。 既存の文字列型とも相互に変換できる。 POINT unicode とはコンピュータ上の具体的な値ではなく 世界中の文字の集合のこと。 各エンコードをすることで、表示可能となる。 デコードは実データをユニコード文字集合の各要素(コード値)に変換すること。
    # unicode 文字列を utf-8 でエンコードする
    u"あ".encode( "utf-8" );

    # sjis でかいたバイト文字列を unicode にデコードする。
    "あ".decode( "utf-8" );

文字列リテラルの前に u をつけると unicode 文字列を表す
    # unicode 型の文字列を生成する
    u"aaa"
___

■ RawString

文字列リテラルの前に r をつけると エスケープシーケンス \ の効力が向こうになる。 POINT 正規表現のあらわすのに便利 "\n" は 改行文字ではなく \ と n の2文字をあらわす
    r'\n'
___

■ 制御構文


___

■ 論理演算子

    and 
    or
    not
    a = 10
    b = 20

    if a == 10 and b == 20:
        print "true"

    if a == 10 or b == 20:
        print "true"

    if not a == 10 and b == 20:
        print "true"
___

■ if

SYNTAX if expression : statement elif expression : suite ["else" ":" suite]
    s = "test2"
    if s == "test":
      print "test"
    elif s == "test2":
      print "test2"
    else:
      print "else"
list に対しての存在チェックをする
    if "a" in [ "a", "b", "c" ]:
        print "a is exist"
___

■ for

    a = [ "a", "b", "c" ]

    for i in a :
      print i;

    for i in range( len(a) ) :
      print i;

    # 指定した回数をループするには range() でリストでつくる。
    #  0 1 2 3
    for i in range(4):
      print i

    # 1 から 9 まで
    for i in range(1, 10):
      print i

    # 2 コ飛ばし
    for i in range(1, 10, 2):
      print i

    # 逆順に
    for i in range(10, 0, -1):
      print i

  WARNING 
    # この記述だめらしい
    for (s in a):

___

■ while

SYNTAX while 条件式 : statement
    cnt = 0;
    while True:
      print "cnt = " + str(cnt);
      if ( cnt > 0 ) :
        break;
___

■ 演算子


___

■ 算術

    a = 10 + 20
    a = 10 - 20
    a = 10 / 2
    a = 10 * 2

    a = 10 % 2
WARNING increment はない
    i = i + 1
    i = i - 1
次の演算子はできる
    i += 1
    i -= 1;
___

■ 関数(Function)


  SYNTAX
    def 関数名 ( arg ):
      statement

    def f():
      print "test";
返値は複数個を指定をできる
    def f():
      return 1, 2

    a, b = f()

    # リストを2つ返す
    def f():
      return ["aaa", "bbb"], ["ccc"]
___

■ 変数のスコープ

関数内の変数はローカルになる
    g = 20

    def  test():
       # ローカル
       i = 10

       # グローバルも参照できる
       print g

       # グローバルの値を変更するには global 文を利用する
       global g = 10
___

■ 引数(Argument)

python デフォルト引数 デフォルト引数を利用するときは 引数の後に デフォルト値を設定する は関数を呼ぶときに省略できる。
    dialogbox( msg="test", title="title"):

    # デフォルト値があるパラメータは省略できる。
    dialogbox()
WARNING デフォルト値は一度しか評価されない。 関数呼び出し毎には評価されない。 複数のデフォルト引数から、特定の引数だけ値を設定する場合はキーワード引数を使う。 引数を指定しない場合はパラメータが順番に渡される。
    dialogbox( title="Prompt" );
キーワードを指定しない場合は 0 番目の引数から順番にわたる
    dialogbox( "Prompt" );
WARNING 固定の引数の後に指定する必要がある。( 可変なため )
    # ERROR
    test( arg1="foo", 10 )
___

■ 可変引数

*args に可変引数をタプルとして受け取り, **kwargs でキーワード引数を Dictionary として受け取る

    def func(*args, **kwargs):
         print args
         print kwargs

    func( "a", 1, 2, test=1, foo="2" )
___

■ 無名関数(lambda)

SYNTAX lambda argument : expression DESC 単一の式で値を返す処理は 無名関数として定義できる
    mul2 = lambda x : x * 2
    
    ret = mul2( 10 )
___

■ 高階関数

関数を引数としてもらう関数のこと 関数をもらうことができるので、具体的な処理をパラメータ化できる。 関数ポインタのように扱うことができる。

    def compare( x,y ):
      

    a = [ 1, 2, 3, 4 ]
    
    a.sort( compare )

___

■ コンテナ




  POINT
    len() はリストの他に文字列やタプル、辞書などの要素数を取得できる



___

■ リスト(list)

    # 初期化
    a = []
    a = ["A", "B", "C", "A"]

    # 要素数
    print len(a)

    # 追加
    a.append( v );

    # 挿入 ( i 番目に v を追加する )
    a.insert( i, v );
    a.insert( 0, v );

    # 削除
    a.remove( v );

    # 削除
    a.pop( i );

    # ソート
    a.sort();

    # 2つのリストを結合する。
    #    [1,2,3,4,5,6]
    a = [1,2,3] + [4,5,6]

WARNING 重複の除去 ( uniq )はない インデックスをつけるには enumerate() を使う
    for i, v in enumerate( ["a", "b", "c"] ):
      print i, v

スタックとして使う
    a.append( 10 );
    a.pop();
スライスを使うとリストの部分を切り出せる。 スライスした結果もリストとなる。

     sys.path[1:2]

     a[1:-2]

     a[1:]

     a[:2]

     # リスト全体をかえす
     a[:]
WARNING 変数はオブジェクト( リスト )の参照をとるため、コピーが必要ならばスライスをする
    a = [1,2,3]

    b = a
    b[0] = 7

    # [7,2,3]
    print a
スライスをすることで a, b は別のオブジェクトを参照する。
    b = a[1]
    b[0] = 7

    # [1,2,3]
    print a
___

■ セット(set)

POINT 集合とは要素が重複しない集まりこと。 ブーリアン演算もできる。
    a = set( [ "a", "b", "c" ] );

___

■ tuple(タプル)

SYNTAX ( object, ... )
    t = (1, "2", "aaa", 0.5)

    # 要素をとりだす
    t[1]

    # タプルオブジェクトは変更できないため、要素の変更はできない。
    t[1] = 10

    # 連結
    t2 = t + ( "a", "b" )
    
___

■ Dictionary(Map)

    # 空の辞書
    a = {};

    # 初期化子リストで初期化
    tbl = { "tanaka" : "090-xxx", "sato" : "090-xxx", }

    # 要素数( 2 )
    len( tbl )

    # 辞書に追加する
    tbl[ "foo" ] = "bar"

    # iteritem() 関数を使うと反復できる。
    for k, v in tbl.iteritems():
      print k; 
      print v; 

    # クリア
    tbl.clear()
    
    # 削除
    del tbl[ "tanaka" ]

    # 存在をテストする
    if "tanaka" in tbl:
      print tbl["tanaka"]

    if "tanaka" not in tbl:
      print "nai"


___

■ フィルター(filter)

    def f(i): return x % 2 == 0;
    
    filter( f, range(1, 10) )

___

■ 写像(map)

    def f(i): return x % 2 == 0;
    
    filter( f, range(1, 10) )

___

■ 組み込み関数


___

■ キャスト(cast)

    # 文字列, 整数を float に変換
    float( "10" )

    # 文字列, 数値を 整数に変換
    int ( 10.5 )

    # 数値を 16 進数の文字列に変換
    hex( 10 )

___

■ オブジェクト

    a = 10

    # オブジェクトの id を整数値として返す
    print id( a )
___

■ 型チェック




    # オブジェクトの型を調べる
    class Foo(): pass
    f = Foo()
    isinstance( f, Foo )

    # list であるかチェックする
    if isinstance( a, list ):  

    if subclass( Foo, list ):  

    len( "abc" )
    len( [1,2,4] )

    # 型オブジェクトを返す
    type( 1 )

    if type("aaa") is str:
      print "str"    
    
___

■ 評価

文字列を python の式として評価して結果をかえす
    eval( "1+2" )
___

■ モジュール(module)


    頻繁に利用する関数、クラスなどの定義、文をファイルとしてまとめておける。
    これをモジュールという。
    モジュールはインポートすることで利用できる。

___

■ モジュールの作成

モジュールにしたい関数、クラスを定義する。 実行可能な文も記述できる。

    def f():
      print "test module"
___

■ インポート(import)

モジュールを import するには 4 つの方法がある。
     import module
     import module as nickname
     from module import name
     from module import *

test.py をインポートする。 この時点では モジュール名の test だけがシンボル表にはいる。
    import test
モジュール内のシンボルを参照するには モジュール.シンボル とする。
    test.f();

    # 頻繁に利用する場合は ローカル変数に代入する。
    f = test.f;
    f();
モジュール名ではなく、モジュール内の名前をローカルシンボル表にいれることもできる。
    from test import f
    f();

    # _ から始まる以外の名前をシンボル表にいれる。
    from test import *
    # os, sys をインポートする。 ( 複数のモジュールを同時に指定できる )
    import os, sys;

    # パッケージ内から特定のモジュールをインポートする。
    import Sound.Effects.echo;

    # ネームスペースを省略する。
    from Sound.Effects import echo;


    # 指定した package 以下のすべてのモジュールをロードする
    # パッケージ内の __init__.py の リスト __all__ のモジュールがすべてロードされる
    from Sound.Effects import *;
    
別名をつけることで、名前を短くできる。
    import os.path as p
    p.basename( "d:/py.txt" );
___

■ dir

モジュール内で定義されている名前を調べるには組み込み関数 dir() を使う。 ソート済みの文字列のリストが返る。 ヘルプ機能として使える。
    import sys, math
    print dir( sys )
    print dir( math )
引数なしでコールすると、現在定義されている名前のリストを返す。
    print dir();
組み込みの関数、変数は組み込みモジュール __builtins__ に定義されている。

___

■ 検索パス

次の順番で python が検索する。
     カレントパス
       $PYTHONPATH
検索パスは sys.path で確認ができる。
    import sys
    print sys.path
import をする前に sys.path の順番を変更することで import するモジュールを切り替えることができる。
    sys.path.insert( 0, "d:/python" )
    import foo
WARNING 自分で書いているスクリプト自身も最初の検索の対象になるため モジュールと同名のファイルにしないこと。
    # wx.py というファイルを用意した場合以下のimport文は自分自身をロードしてしまう。
    import wx;

    # チェックするには __file__ で見る。
    print wx.__file__

___

■ パッケージ(package)

module をパッケージしたもの。 ディレクトリ構造でパッケージされる。 パッケージをつくるには, 入れ物となるディレクトリをつくる。 検索パス以下に置く。 WARNING __init__.py というファイルは各パッケージごとに必須。 ないとパッケージ内のモジュールをインポートできない。
    $PYTHON_PATH
                /testpack/
                         __init__.py
                         foo.py
import する側はディレクトリをパッケージ名にしてインポートする。
    import testpack.foo

    # module 内の関数をコールする    
    testpack.foo.func()
__init__.py はパッケージの初期化時に評価される。 __all__ 属性にロードしたい対象のリストをいれておくと * で同時にロードできる。
    __all__ = [ "foo" ]
インポートする側は * を指定することで __all__ で指定したすべてのモジュールをロードできる。
    import * from testpack
___

■ クラス(class)


  SYNTAX
    class NAME:
      statement;




    クラスを定義する。
    定義が評価されるとクラスオブジェクトが生成される。
    class Test:
      # これはクラスオブジェクトの変数 ( C++ でのメンバとは異なる )
      i = 10;

      def __init__( self, i ):
        self.i = i;

      def f( self ):
        print "calll method = ", self.i
      
クラスをインスタンス化するには関数表記() を使う。 これによって空のオブジェクトが作成される。
    x = Test();

    # 生成されたインスタンスには属性参照ができる

    # データ属性を参照する
    print x.i;

    # 関数オブジェクトのデータ属性を参照する
    print x.f;

    # メソッドをコールする。
    #  
    x.f();

    # メソッドをコールすると第一引数としてインスタンスが関数に渡される。
    # 次の処理と同じ。
    Test.f( x );  

    
___

■ コンストラクタ . constructor

__init__ というメソッドを定義すると インスタンス生成の時点でコールされる。
    class Test
      def __init__( self, i, j ):
        self.i = i;


    # コンストラクタに引数を渡してインスタンスを作成する
    i = Test( 10, 2 );

___

■ メソッド(method)

    class Test
      def f( self, i, j ):
        self.i = i;

      # メソッドから別のメソッドをコールするには self 引数を経由する
      def g( self ):
        self.f();

    # メソッドをコールする。
    x.f();
    
  POINT
    # これと同じ
    Test.f( x );
    
___

■ プライベート変数

POINT クラス内アクセス限定にするには識別子に __ を2個以上を前置する。 これによって名前が変更されるため、外からアクセスされにくくなる。
    class Test
      def f( self, i, j ):
        self.i = i;

      def __p( self ):
        print "calll private method"


    i = Test( 1, 0 );

    # これはコールできない
    i.__p();

  POINT
    名前を変更しているにすぎないので, 次のようにコールできる
    i._Test__p();

___

■ 文字列表現

__str__ をオーバーライドすると str() 関数の結果をカスタマイズできる
    class Test:
      def __str__(self):
        return "test";

    t = Test()
    print str(t)      
___

■ 継承

SYNTAX class Name( Base ): statement:

    class D( Test ):
      def h( self ):
        print "call method h"

      # オーバーライドするには同名の属性をつける。
      def f( self ):
        print "call overwrite method f"

    # 派生クラスをインスタンス化する
    i = D(10, 1);

    i.h();

  POINT
    # メソッドの探索は派生クラスから順番にされる。
    # 属性名として f を指定すると D.f() -> Test.f()と順番に検索される。
    i.f();
すべてのクラスは object を継承する。
    # 明示することもできる。
    class Test( object ):
      pass

    # これと同じ
    class Test:
      pass
___

■ 内部クラス

    class Test:
      class Type:
        """ 
        内部クラス
        """
___

■ オペレータのオーバーライド


    def Vector:
      def __add__(self, rhs ):
        

      def __sub__(self, rhs ):

      def __mul__(self, rhs ):
        


___

■ Error


  POINT
    ファイル, ラインが表示されるので、問題箇所は一目できる。
    

___

■ 例外の処理(try-catch)

SYNTAX try: statement except Error: statement; finally:

    try:
      
    except IOError:


    # 例外名を指定しないとすべての例外をとらえる
    except :

    # finally 節は必ず実行されるので, クリーンナップ処理をかいておく
    finally:
      
    # 例外をなげる。
ネットワークプログラムで try - catch を使ってみる。
    import socket

    host = '127.0.0.1'
    port = 8080

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    try:
      sock.connect((host,port))
    except:
      print "connect error"
      exit()
          
___

■ 例外を定義する

    class Except( Excepction ):
      

___

■ with


    with 文を使うと終了処理が必ず実行される。
    
    with open( "test.txt" ) as f:
      for s in f:
        print s;
___

■ math


___

■ 組み込み関数

    # 1
    abs( -1 )

    # 商とあまりを返す
    d, m = divmod( 10, 3 )

    # 1024
    pow( 2, 10 )

    # 1
    round( 1.23 )
    
    # 小数第一位
    # 1.2 
    round( 1.23, 1 )
___

■ 標準ライブラリ

    import math;
    
    math.cos( math.pi );
    math.sin( math.pi );

    math.degrees( math.pi )
    math.radians( math.pi )
    
    import random
    
    # [0:1)
    random.random()
    
  WARNING 
    # ++ がないかもしれない
    i = 0
    i += 1

___

■ numeric(数値演算)

REF numeric ベクトル
    v = numpy.array( (2.0, 2.0, 1.0) )
   
    # ノルム
    l = numpy.linalg.norm(v)
    
    # 内積 外積
    numpy.dot(v1,v2)
    numpy.cross(v1,v2)
行列
  m = numpy.matrix( (
    (2.0, 0.0, 10),
    (0.0, 3.0, 10),
    (0.0, 3.0, 10),
    ) )

    # 逆行列, 転置
    print ( a.I )
    print ( a.T )

    # 行列式
    numpy.linalg.det(a)
    
    #行列とベクトルの積
    ret = numpy.dot(mat,v)

    #行列の積
    ret = m * m;
___

■ コマンドライン(引数解析).commandline





    簡単に使うには os.sys.argv を使う。    
    # 0 番目の引数は スクリプトパス
    for s in os.sys.argv:
      print s

    # len( sys.argv ) == 4
    shell> test.py a b c
___

■ OptionParser

引数を解析して, 結果を dictionary として返す。
    from optparse import OptionParser

    parser = OptionParser()

    # -f FILE の値を filename 変数にセットする
    parser.add_option( "-f", "--file", dest="filename" );
    
    (opts, args) = parser.parse_args()
    print opts.filename


    # 次のように呼ぶ
    test.py   -f  d:/test.xml
ON/OFF のフラグを指定する
    # action で -q がセットされた時の処理を指定する。
    #  デフォルト は変数への store で、 store_false は False の値を verbose 変数にセットする。
    parser.add_option("-q", "--quiet",
                  action="store_false", dest="verbose", default=True );

    (opts, args) = parser.parse_args()
    print opts.verbose

    test.py  -q 
ヘルプを追加する。
    parser.add_option("-f", "--file", dest="filename",
                    help="write report to FILE", metavar="FILE")
___

■ urlencode.URL.エンコード


  各文字コードに変換してから  urllib2.quote に渡す。
  import urllib2

  s = u"あああ"
  urllib2.quote( s.encode("utf-8") )
  
  
___

■ ネットワーク(Network)


___

■ urllib2

指定した URL のリソース( HTML など )を取得する。 urllib よりも機能が豊富
    import urllib2

    for line  in urllib2.urlopen( "http://www.google.co.jp" ):
        print( line );
___

■ urllib

POINT 1度の read() ですべてを読める保障がないので繰り返す。
    # urlopen を使って ネットワーク先のリソースを開く

    p = urllib.urlopen( "http://www.google.co.jp" )

    # read() を使って読む。
    s=""
    while (1):
      st = p.read()
      if not st:
        break;
      s += st


___

■ socket . ソケット

DESC 低レベルのソケットAPIを利用できる。 WinSock などの API とほぼ同じ。 WinSock の使い方

    import socket

    # ローカルのウェブサーバからページを取得。
    host = '127.0.0.1'
    port = 8080

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host,port))

    # GET メッセージをなげて、ページを取得。
    sock.sendall("GET / HTTP/1.0\r\n\r\n");
    while True:
        rcvmsg = sock.recv(1024)
        print 'Received -> \n%s' % (rcvmsg)

        if rcvmsg == '':
          break

    sock.close()

___

■ ftplib

ftplib を利用すると FTP プロトコルを利用してサーバにファイルを アップロード、ダウンロードすることができる
    ftp = ftplib.FTP( "server", "user", "password" )
    
    # サーバのカレントディレクトリを移動
    ftp.cwd( 'www' )

    # ローカル d:/test.txt へ保存する
    f = file.open( "d:/test.txt" )
    
    ftp.retlines( 'RETR ' + filename, lambda line: f.write( line + "\n") ) 

    f.close()
    ftp.quit()    
    
___

■ gui


___

■ Tkinter

from Tkinter import *

class Application(Frame):

    def say_hi(self):
        print "hi there, everyone!"

    def createWidgets(self):

        self.gui = Button(self)
        self.gui["text"] = "QUIT"
        self.gui["fg"]   = "red"
        self.gui["command"] =  self.quit
        self.gui.pack({"side": "left"})

        self.o = Button(self)
        self.o["text"] = "Hello",
        self.o["command"] = self.say_hi

        self.o.pack({"side": "left"})


    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

root = Tk()
app = Application()
app.mainloop()
root.destroy()

___

■ wxPython

Window をだす
    import wx


    app = wx.App()

    frame = wx.Frame(None, -1, "simple" )
    frame.Show(True)

    app.MainLoop()
GUI部品を配置する
    app = wx.App()

    frame = wx.Frame(None, -1, "simple" )
    frame.Show(True)

    wx.StaticText(frame, -1, "test", (10, 10))
    wx.Button(frame, -1, "push", (10, 20))

    app.MainLoop()
キーボードイベント

    import wx

    class Test(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title)

            panel = wx.Panel(self, -1)
            panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
            panel.SetFocus()
            self.Show(True)


        # keyboard Callback        
        def OnKeyDown(self, event):
            keycode = event.GetKeyCode()

            if keycode == wx.WXK_ESCAPE:
                ret = wx.MessageBox('Are you sure to quit?', 'Question',
                                    wx.YES_NO | wx.NO_DEFAULT, self)
                if ret == wx.YES:
                    self.Close()
            event.Skip()

    app = wx.App()
    Test(None, -1, "keyevent" )
    app.MainLoop()
ボタンイベント
    import wx;


    class MyButton(wx.Button):
        def __init__(self, parent, id, label, pos):
            wx.Button.__init__(self, parent, id, label, pos)
            self.Bind(wx.EVT_BUTTON, self.OnClicked)

        def OnClicked(self, event):
            print 'event reached button class'
            event.Skip()

    class Propagate(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title, size=(250, 150))
    #        panel = MyPanel(self, -1)
            MyButton(self, -1, 'Ok', (15, 15))

            #self.Bind(wx.EVT_BUTTON, self.OnClicked)

            self.Show(True)

        def OnClicked(self, event):
            print 'event reached frame class'
            event.Skip()

    app = wx.App()
    Propagate(None, -1, "propagate" )
    app.MainLoop()
___

■ 時刻(date.time.timer)


    from datetime import date

    # 2012-01-08
    print date.today();

___

■ timer

    import timeit;
    
    t = date.today();
___

■ test


    # docstring に埋め込まれたテストを実行する
    import doctest;
    

___

■ Thread . スレッド





    import threading;
    import time;
    
    class Worker( threading.Thread )
      def __init__();

      def run(self):
        # 3 秒まつ
        time.sleep(3);
        f = open();
    
    w = Worker();

    w.start();

    # 終了まち
    w.join();  
    

    class FileLoader(threading.Thread):
        def __init__( self, a ):
            threading.Thread.__init__(self)
            self.a = a

        def run( self ):
            for path in self.a:
              path
___

■ 標準ライブラリ



___

■ 正規表現(regexp)


    import re

    print "aaa".replace( "aa", "b" );


    print re.findall( r"\bf[a-z]+", "foo bar fff" )

    # マッチする文字をすべて置換
    print re.sub( r"\bf[a-z]+", "ddd", "foo bar fff" )

    # マッチするか検索。マッチすれば MatchObject を返す。
    if re.match("^#include", s ) != None :
      print "not match"

re.search() は文字列に含まれる任意の部分文字列を探す re.match() は文字列の先頭にある部分文字列を探す WARNING #include にはマッチしない
    #print s,
    if re.match("include", s) != None :
      print s
search ならば途中の文字列でも検索してくれる
    if re.search("include", s) != None :
      print s

    if re.search("include", s) == None :
      print "not match"
WARNING 文字としての | を指定する時はエスケープをすること

    # | の左側は空文字列の指定になるため必ずマッチしてしまう。
    if re.match( "|aaa", "bbb" ) != None:
        print "match"


    if re.match( "\|aaa", "bbb" ) != None:
        print "match"

___

■ FileSystem(ファイルシステム)




     # open は file object を返す
     fp = open( "d:/test.txt" , 'w')

     print f

    
    fpW = open('d:/test.txt', 'w')
    fpW.write("test");

    
    # stdin から入力    
    a = raw_input();

___

■ tmpfile

tmpfile を生成するには tempfile モジュールを使う。
    import tempfile

    path = tempfile.mktemp()
    
    # / に変更する
    path = tempfile.mktemp().replace('\\', '/')
___

■ os

directory を再帰的に作成する場合は, os.makedirs() を使う
    import os
    os.makedirs( "d:/foo/bar/goo" )
    # カレントディレクトリの変更
    os.chdir( "d:/" )

    # カレントディレクトリ
    os.getcwd()
外部プロセスの実行
    os.system( "notepad" )
    import os

    os.mkdir("d:/py/" );
    os.mkdir("d:/foo/bar" );

    # test.txt    
    os.path.basename( "d:/test.txt" );

    # test.txt    ( filename が返る )
    os.path.basename( "d:/test.txt" );

    # ( test, txt )
    file, ext = os.path.splitext( "test.txt" )

    # d:/foo
    os.path.dirname( "d:/foo/test.txt" );

    # True
    os.path.isdir( "c:/" );
    
    # ディレクトリ存在チェック
    os.path.exists( "d:/foobar" );

    # ファイル存在チェック
    os.path.exists( "d:/test.txt" );

    # 
    os.path.join

    # ディレクトリ内のエントリをリストとして返す
    os.listdir( "d:/" )
    
___

■ shutil

ファイルのコピーなどの操作は shutil モジュールを使う。
    import shutil

    shutil.copy( "d:/src.txt", "d:/dst.txt" )

    shutil.move( "d:/src.txt", "d:/dst.txt" )
___

■ getFile

os.walk( パス )と渡すと パス以下のディレクトリから、パス/サブディレクトリ/ファイル名のタプルを返す。 再帰処理をしなくても自動ですべてのファイルをイテレートする。
  import os
  
  for root, dirs, files in os.walk( "c:/" ):
  for f in files:
        print root,  f
___

■ BuildPath

  import os
  # d:\test\foo\bar
  os.path.join( "d:\\test", "foo", "bar" );  
___

■ glob.getFile

ディレクトリからファイルのリストを取得するには glob を使う。 ディレクトリをワイルドカード検索してリストを返す
    import glob
    print glob.glob( "*.py" );
ディレクトリを含めたパターン指定もできる。
    print glob.glob( "c:/users/*/*.py" );
___

■ interpreter


    # interpreter を起動
    python


    c-d で終了

___

■ キャスト(cast)


___

■ 型

python のデータオブジェクトは次の2つがある
     変更可能型
     変更不能型
     数値
     コレクション
    # 整数 float の計算は float に変換されて実行される
    1 + 1.3;

    
    
___

■ 精度


    10進数の小数点は 2進数では正しく表現できない。
    近似した値がメモリに格納される。


___

■ print


  SYNTAX
    print expression[, expression]
    
    # 複数の式をスペース区切りで出力する
    print "aaa", 10, "bbb";

    # format するには % を利用する
    print "File s is Not Exist" % "test.txt"

    # 文字列操作でも format はできる
    s = "Total Time %d  Processd" % 10
___

■ OpenGL




  C:\Python27\Lib\site-packages\

python ./ez_setup.py
Downloading http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-y2.6.egg
Processing setuptools-0.6c11-py2.6.egg
Copying setuptools-0.6c11-py2.6.egg to /usr/lib/python2.6/site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install script to /usr/bin
Installing easy_install-2.6 script to /usr/bin

Installed /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11


___

■ 画像処理(PythonImageLibrary)





    import Image

    # 開く
    im = Image.open("d:/test.bmp")

    # フォーマットとサイズ
    print im.format, im.size, im.mode

    # 左右に反転
    out = im.transpose(Image.FLIP_LEFT_RIGHT)

    # 保存
    out.save("d:/out.bmp")

    # 各ピクセルを 0.7 倍する
    out = im.point(lambda i: i * 0.7)

    # 成分ごとに分解
    source = im.split()

    R, G, B = 0, 1, 2

    # マスクを作成する。
    mask = source[R].point(lambda i: i <  100 and 255)

    # 緑の成分を変更する
    out = source[G].point(lambda i: i * 0.2)

    # マスクを使ってペーストする。
    source[G].paste(out, None, mask)

    # 成分情報から Image object作成
    im = Image.merge(im.mode, source)

___

■ xml


___

■ minidom

    from xml.dom import minidom

    # test.xml を開く
    doc = minidom.parse("d:/test.xml")

    # < test> 要素を取得
    e = doc.getElementsByTagName("test")[0]

    # test name= の値を取得
    print(e.getAttribute("name"))

    # attribute をセット
    e.setAttribute("name", "test")

    print(e.getAttribute("name"))

    # XML 文書の全ての構成要素は Node のサブクラス
    print ( e.parentNode.localName );

    # Node をつくり、子供に追加
    n = doc.createElement( "newnode" );
    n.setAttribute( "key", "value" );
    e.appendChild( n );

    # 保存
    fp=open("d:/out.xml","w")
    doc.writexml(fp)
    fp.close()
___

■ プロセス(Process)


___

■ subprocess

SYNTAX class Popen( args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) subprocess モジュールの Popen コンストラクタを使う。

    ps = subprocess.Popen( ['hostname'] )
    ps.wait()

    
    ps = subprocess.Popen( ["ping", "localhost"] )
    ps.wait()

    # shell が True の場合、 指定されたコマンドはシェル( cmd.exe ) を介して実行される。
    ps = subprocess.Popen( ["ver"], shell=True )
    ps = subprocess.Popen( ["cmd", "ver"] )

___

■ import ctypes


from ctypes.wintypes import MAX_PATH

dll = ctypes.windll.shell32
buf = ctypes.create_unicode_buffer(MAX_PATH + 1)
if dll.SHGetSpecialFolderPathW(None, buf, 0x0005, False):
    print(buf.value)
else:
    print("Failure!")

>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'


___

■ 環境変数(getenv)


    import os

    os.getenv("username")

    os.getenv("username")
    os.getenv( "TEMP" )
___

■ ExitCode . 終了コード


  import  sys
  sys.exit( 0 )


NINJAIDX 8