HOME Python 書き込む

Python 早めぐり


0. 初めに

Python の概要をトップダウンで説明してみました。 まず、python の起動方法、スクリプトの書式について説明してから だんだん細かい話に入っていきます。全体像から説明するので、飽きたところでやめられるという利点があります。 一方、ボトムアップで説明すると理路整然としていますが、はじめに退屈な話が続き、いきなり飽きてしまう という欠点があります。

Python は人気になりつつある言語で、優れた紹介記事が Web 上にたくさんあります。 その中でも、日本 Python ユーザ会は 優れたサイトです。ここから、各種マニュアルの日本語訳がダウンロードできます。 この解説記事は、実は、日本 Python ユーザ会が翻訳したマニュアルへのリンク集です。 リンクを張れるという HTML の特徴を生かせば、無理なく、トップダウン方式の解説を書くことが出来ます。

ちなみにここで、ボトムアップというのは個々の部品を作ってから全体を作るという意味です。 会社などの組織で下層の要員の発案でプロジェクトを起こすという意味ではありません。 同様に、トップダウンを言うのは見取り図を示してから段々と細かい話に入るという意味です。 会社などの組織でトップの発案でプロジェクトを起こすという意味ではありません。 念のため。

0.1. 目次

  1. 起動方法
  2. Python スクリプトの書式
  3. 代入
  4. ブロック
  5. 入出力
  6. 関数定義
  7. クラス定義
  8. データ型
  9. 演算子
  10. ライブラリーツアー
  11. 付録

1. 起動方法

まず、Python の実行ファイルのあるディレクトリに PATH を通しておきます。
その後、プロンプトから、
python option   script   argvs 
と打ち込むと起動します。"python" とだけ、打ち込むと対話モードに入り ">>>" というプロンプトが 表示されます。対話モードは個々の関数をテストするのに便利です。 起動オプションは以下の通りです。
python [-diOStuUvx?] [-c command | script | - ] [argvs]
オプション 効果
-d デバック情報を出力する。
-i スクリプトを対話的に検査し、プロンプトを出力する。
-O 生成するバイトコードを最適化する。
-S import 文を無視する。
-t 矛盾したインデント付けを警告する。
-u バッファ無しのバイナリー標準出力と標準エラー出力
-U 文字列リテラルを Unicode として読む
-v 詳細な import 文の追跡
-x ソースの最初の行をスキップ。
-? ヘルプ
-c command
指定されたコマンドを実行
script
python ファイル (.py) を読み込んで実行
argvs
スクリプトまたはコマンドの引数
対話モードで起動するとき、環境変数 PYTHONSTARTUP で指定されたファイルを読み込みます。 よく使うモジュールを import しておくと便利です。 詳しくは
チュートリアル 2.1. を見てください。

スタートアップファイルの例:

01:     # PYTHONSTARTUP
02:     
03:     import sys, math, re, os, os.path
04:     print 'sys, math, re, os, os.path has been imported.'

2. Python スクリプトの書式

Python スクリプトの書式は以下の通りです。
00:     #! /usr/bin/env python
01:     # -*- coding: shift_jis  -*-
02:     
03:     r"""
04:     スクリプトについての説明
05:     説明1:
06:     説明2:
07:     """
08:     import string
09:     from datetime import date
10:     import tkinter as tk
11:     
12:     #function
13:     def sum(ls):
14:         """ リストの要素の合計を求める"""
15:         s=0
16:         for x in ls:
17:             s+=x
18:         return s
19:     
20:     class MyClass:
21:         """私のクラス"""
22:         def __init__(self, p1, p2):
23:             self.p1 = p1
24:             self.p2 = p2
25:     
26:         def show_p1(self):
27:             return self.p1
28:     
29:         def show_p2(self):
30:             return self.p2
31:     
32:     if __name__ == '__main__':
33:         print sum([x*x for x in range(10)]
01:
UNIX でスクリプトを直接実行するのに使います。 chmod +x script とすると python script とせず、 script とすれば実行されます。 UNIX 以外の OS でも、移植性を考慮してこの行を書いたほうが良いでしょう。 ちなみに '#' から行末まではコメントとみなされます。1行目と2行目は特殊なコメントです。
02:
ソースコードの文字コード方式を指定します。日本語を使う場合 shift_jis, euc-jp, あるいは iso-2022-jp を指定します。 Python 2.4 以降では日本語のモジュールを 別途入手する必要はありません。
03--06:
コードの説明を書きます。三重クォート(""") で囲まれた 文字列は、そのままの形で表示されます。 ソースコードの先頭、またはクラスや関数の定義の先頭に、三重クォートで囲まれた文字列があると pydoc がそれに基づいてこんな感じの HTML 形式のマニュアルを自動的に作ってくれます。
08--10:
モジュールを import します。python は C 言語のように多くのライブラリに分かれていて、 ほとんどの関数、クラス、定数 etc はライブラリ(モジュール)に収められています。 モジュールを import する書式には次の4通りがあります。
  1. import module
  2. from module import name
  3. import module as nickname
  4. from module import *
1番目は module を普通に import します。module の中のnameを使うときには module.nameとします。
2番目の方法だと、単にnameと書くだけでmodule の中のnameを使うことが出来ます。
3 番目は modulenicknameという名前をつけて import します。 module の中のnameを使うときには nickname.nameとします。
4番目の方法は、module の export されている名前全てについて単にnameと書くだけで 使うことが出来ます。python には名前が同じでモジュールが異なる機能がたくさんあるので、 この方法は薦められません。module 名を書くのが面倒なときは3番目の方法を用いて module 名に 短いニックネームをつけて import しましょう。例えば、
import os.path as path
import Tkinter as tk
13--18:
関数定義です。5章で説明します。
20--30:
クラス定義です。6章で説明します。
32--33:
このスクリプトが直接呼ばれたときに 33 行目が実行されます。 32 行目はそのためのおまじないです。

対話モードで、import(script) を使って読み込まれたときには 33 行目は実行されないので、 個々の関数を別個にテストするのに便利です。

3. 代入

いくら、トップダウンで説明するといっても代入については最初に述べておく必要があります。

Python の代入は基本的に C 言語と同じで、'=' の右側の値を左側に代入します。 C 言語と違うところは、代入文は値を返さないところです。従って、C 言語風に次のようには書けません。

c=1
if 0==(a=c):
    print 'a = 0'
else:
    print 'a = 1'
また、Python は複数の代入を同時に行うことができます。これはとてもクールです。2番目のように構造化代入もできます。
a, b, c = 1, 2, 3
(a, (b, c)) = (10, (20, 30))

4. ブロック

Python のブロックはコロン ':' とインデントの増加で始まり、インデントが元に戻ると終了します。 ブロックには後で説明する関数定義、クラス定義のほかに、次のものがあります。

4.1. 分岐(if, elif, else)

書式は次の通りです。
まず、test を評価し、 それが真を返せば then_block を実行します。
そうでなければ、 test_elif を評価し、それが真を返せば elif_block を、
そうでなければ else_blick を実行します。
if test:
    then_block
elif test_elif:
    elif_block
else:
    else_block

真偽値について:

Python では None、 False、ゼロ(数値)、 空
配列、空辞書 及びユーザ定義クラスで __nonzero__() や __len__() が数値 zero または False を返す場合 は偽として扱われます。 その他の値 (True, etc) は真として扱われます。 比較演算子には ==, !=, <, >, <=, >=, in, is があります。また 真偽を反転させる演算子 not があります。 比較演算子とよく使う真偽値関数は付録2. 真偽値を返す演算子と主な関数を参照してください。

4.2. ループ

ループを記述するブロックには whilefor があります。

4.2.1. while ループ

書式は以下の通りです。
test が真の間、body_block を実行します。 C 言語と同様にループから抜け出す break, 次のループへジャンプする continue が使えます。 ループが(break で抜け出さないで)終了した場合は else_block が実行されます。 else_block は省略可能です。
while test:
    body_block
    if break_test:
           break
    if continue_test:
           continue
else:
    else_block

4.2.2. for ループ

書式は以下の通りです。
iterator の要素 x について、 body_block を実行します。 while と同様に break, continue が使えます。 ループが(break で抜け出さないで)終了した場合は else_block が実行されます。 else_block は省略可能です。
for x in iterator:
    body_block
    if break_test:
           break
    if continue_test:
           continue
else:
    else_block

4.2.3. for ループの実際

for ループは python でよく使われるブロックです。以下のような使い方があります。
range, xrange: 数の範囲にわたる繰り返し
range 関数を用いて数のリストを作り、それから要素を1つずつ取ってきて繰り返します。 range は普通の関数で、素直にリストを返しますが、 xrange は generator なので、 呼ばれるたびに必要な数を返します。範囲が大きいときは xrange を使うほうが良いでしょう。 (ただし、Python 3 では range が generator になるので、xrange は無くなるかも知れません。)
>>> for x in xrange(10):
	print x, ', ',

0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 
iterator に番号をつける。
enumerate を使います。
>>> s='abc'
>>> for i, c in enumerate(s):
	print i, ':', c, ' ',

0 : a   1 : b   2 : c    
ファイルの行を取り出して繰り返す。
file object を iterator として使うと 各行が順番に取り出されます。
for line in _file:
     ..............
iteritems()
辞書の内容にわたってループを行う際、iteritems() メソッドを使うと、 キーとそれに対応する値を同時に取り出せます。下の例にあるように取り出す順番は不定です。
>>> days = {'sun':0, 'mon':1, 'tue':2, 'wed':3, 'thu':4, 'fri':5, 'sat':6}
>>> for k, v in days.iteritems():
	print k, ':', v, ' ',

wed : 3   sun : 0   thu : 4   tue : 2   mon : 1   fri : 5   sat : 6  
zip()
二つまたはそれ以上の配列型を同時にループするために、 関数 zip() を使って各要素をひと組みにすることができます。
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print 'What is your %s?  It is %s.' % (q, a)
... 
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

4.2.4. リストの内包表現

リストをとって、リストを返すブロックは内包表現を使って書くことが出来ます。 内包表現は if による選別や多重ループも表現できます。 この表現は数学の集合の記述法(例えば、X = {x | x は正の整数})に似ています。 この記法はかなり便利です。 (リストについてはデータ型を見てください。)
# ls のうち、正の要素について平方根を計算しそのリストを返す。
ls = [1, 2, -3, -4]
# 通常のループ
def foo1 (ls):
    ls1=[]
    for x in ls:
        if x > 0:
            ls1.append(math.sqrt(x))
    return ls1

# 内包表現
def foo2 (ls):
    return [ math.sqrt(x) for x in ls if x > 0]
# 九九を返す。
# 通常のループ
def bar1 ():
    ls1=[]
    for x in range(2,10):
        for y in range(2,10):
            ls1.append(x*y)
    return ls1

# 内包表現
def bar2 ():
    return [x * y for x in range(2,10) for y in range(2,10)]

4.3. 例外処理

例外を取り扱うときには try を使います。 書式は以下の通り。詳しくは Python Tutorial 8. Errors and Exceptions を見てください。
try:
    try_block
except ??Error:
    exept_block
else:
    else_block
finally:
    finally_block
まず、try_block を実行し、もし、例外が発生すれば、 exept_block を実行します。例外の種類別に複数の exept_block を書くことができます。例外が発生しなければ else_block を実行します。 else_block は省略可能です。

finally_block は例外発生の有無にかかわらず 必ず実行されます。LISP の unwind-protect に似ています。finally_block は省略可能です。

また、__enter__ と __exit__ メソッドが定義されているクラスのインスタンスを 生成する場合は with ステートメントを用いることもできます。 詳しくは、Python 2.5 の新機能をみてください。

5. 入出力

詳しくは、 Python ライブラリリファレンス 2.3.8. を見てください。

6. 関数定義

関数は def を用いて定義します。関数内で宣言なしでローカル変数を使うことが出来ます。 値を返すときは return を使います。関数内部の最初の文を文字列リテラルにすると、pydoc が それを自動的に読み込んでマニュアルを作成します。以下に書式を示します。 def の後に関数の名前が続き、その後に ( ) でくくられた仮引数リストが続きます。 その後、コロン ':' をつけ、改行しインデントして、定義本体が続きます。インデントを 戻したところで定義は終わります。 関数内部の式の意味が不明な場合
7章演算子を見てください。 また、関数定義について詳しいことはチュートリアル 4.6, 4.7 を見てください。
def sum(ls):
    """ リストの要素の合計を求める"""
    s=0
    for x in ls:
        s+=x
    return s
>>>sum([1,2,3])
6

6.1. 引数の書式

def func(a, b, c): (通常の書式)
ちょうど3個の引数をとる。デフォルト値はなし。 func(x,y,z) の様にちょうど3個と引数を与えないとエラーになる。
def func(a=0, b=1, c=2): (デフォルト値付き書式)
引数を省略するとデフォルト値が使われる。
def func(a, *rest): (任意の個数の引数)
*rest は タプルとして関数に渡される。
def func(**key): (引数を辞書型にしてわたす。)
func(a=1, b=2) &rArr key={'a':1, 'b':2} がわたる。
*rest と **key を両方使うときは *rest が **key より前になければならない。

6.2. generator

for ループで使うイテレーター(別の用語ではストリーム)を定義する関数です。 値を yield を使って返します。generator は計算経過を覚えていて、呼び出されるたびに計算を再開させ、 yield に出会うと、値を返して計算を凍結させます。 例えば range の generator 版を簡単に書くことが出来ます。
import sys

def my_xrange(*parms):
    lp = len(parms)
    if not 0 <= lp <= 3:
        print >> sys.stderr, "Wrong argument count."

    if(lp==0):
        i = 0
        while True:
            yield i
            i += 1
    else:
        i, n, s = (lp==1 and (0, parms[0], 1)) or \
                  (lp==2 and (parms[0], parms[1], 1)) or \
                  (parms[0], parms[1], parms[2])

        if(s==0):
            print >> sys.stderr, "Step width shuld be non-zero."
        
        elif(s > 0):
            while(i < n):
                yield i
                i+=s
            
        else:
            while(i > n):
                yield i
                i+=s

6.3. 無名関数

def で定義すると冗長になる短い関数は無名関数を使って定義することができます。
無名関数の定義は 'lambda' に続けて引数をカンマで区切って書き、 コロンの後に帰り値を書きます。 一行で書けるものにしか使えないので本当に単純なものしか定義できませんが、それでも便利なことがあります。

例:

lambda x,y: x+y         # 足し算
lambda x,y: x*y         # 掛け算

7. クラス定義

ベクトルクラスを定義して、使い方を説明します。 このクラスでは演算子 '+', '*' を再定義して、ベクトルの加算、内積が計算できるようにしています。 以下のコードと説明とを見比べてください。

また、Python 2.2 以降では、組み込みデータ型を親クラスにできるようになりました。 それを使ったベクトルクラスは Python の "新しい" クラス にあります。(そちらのほうが実用的です。)

#! /usr/bin/env python
#  coding: shift_jis 

import sys, math

def sum(ls):
    """リストの要素を合計します。"""
    s=0
    for x in ls:
        s+=x
    return(s)

class Vector:
    """
    Vector はベクトル演算のためのクラスです。
    """
    def __init__(self, *rest, **key):
        """
        ベクトルを初期化します。
        要素が渡されたら、その要素からなるベクトルを作ります。
        v1 = Vector(1,2,3)
        次元と初期値が渡されたら初期値 val, 次元 dim のベクトルを作ります。
        val が省略されると初期値は 0 になります。
        v1 = Vector(dim=3, val=3)
        """
        if rest:
            self.v = list(rest)
        else:
            dim = key['dim']
            val = (('val' in key) and key['val']) or 0
            self.v =  [val for x in range(dim)]

    def __len__(self):
        """ベクトルの次元を返します。"""
        return len(self.v)
    
    def abs(self):
        """ベクトルの絶対値を返します。"""
        return math.sqrt(sum([ x * x for x in self.v ]))

    def norm(self):
        """規格化されたベクトルを返します。"""
        a = self.abs()
        b = Vector(dim=len(self))
        b.v = [x/a for x in self.v]
        return b
        
    def __add__(self, a):
        """ベクトルと実数、またはベクトル間の足し算をします。"""
        b = Vector(dim=len(self))
        if isinstance(a, Vector):
            if len(self) != len(a):
                print >> sys.stderr, "Dimension Error"
            else:
                b.v =  [ x + y for x, y in zip(self.v, a.v)]
        else:
            b.v = [ x + a for x in self.v]
        return b
            
    def __mul__(self, m):
        """ベクトルと実数、またはベクトル間の掛け算(内積)をします。"""
        if isinstance(m, Vector):
            if len(self) != len(m):
                print >> sys.stderr, "Dimension Error"
            else:
                return sum([ x * y for x, y in zip(self.v, m.v)])
        else:
            b = Vector(dim=len(self))
            b.v = [ x * m for x in self.v]
            return b

    def __repr__(self):
        """表示するときの文字列を定義します。"""
        return '#V' + `self.v`

    __str__ = __repr__

7.1. クラス定義

クラスの定義は
class class_name(*super_classes):
  .......
で行います。スーパークラスがあれば、それを引数に与えます。多重継承もありです。

7.2. インスタンスの生成

特別なメソッド __init__ でインスタンスを生成します。 __init__ の最初の仮引数 self はインスタンス自身で、それ以降の引数が インスタンス生成時に与えられる引数です。次の様な使い方をします。
# 要素を明示的に与える
>>>v1 = Vector(1,2,3)
# 次元と初期値を与える
>>>v2 = Vector(dim=3, val=0)

7.3. メソッドの定義

メソッドの定義は関数定義と同じ def を用います。 最初の仮引数はインスタンスそれ自身です。 ここでは、ベクトルの長さを返すメソッド abs と規格化されたベクトルを返す norm を定義しています。使うときはインスタンスの後ろに '.'(ドット)をつけてつなげます。
>>>v = Vector(1,2,3)
# 長さの計算
>>>v.abs()
3.7416573867739413

# 規格化する
>>>v.norm()
#V[0.2672612419124244, 0.53452248382484879, 0.80178372573727319]

7.4. 関数や演算子のオーバーライド

既存の関数を再定義することが出来ます。 __add__ は足し算を、__mul__ は掛け算を定義します。 また、__repr__ は表示方法を定義します。 他にもいろいろあります。詳しくは リファレンスマニュアル 3.3 を参照してください。 使い方は以下の通りです。
>>> v1=Vector(1,2,3)
>>> v2=Vector(dim=3, val=2)
>>> v1+10
#V[11, 12, 13]
>>> v1+v2
#V[3, 4, 5]
>>> v1*100
#V[100, 200, 300]
>>> v1*v2
12

7.6. 関数のクラス

__call__ メソッド のあるクラスは関数のクラスとして機能します。 詳しくは、 リファレンスマニュアル 3.3.4. を見てください。

7.6. イテレーター

イテレータークラスを定義することも出来ます。 通常は generator を使ったほうが楽でしょう。 詳しくは チュートリアル 9.8. を見てください。

8. データ型

8.1. 数値

数値型には、整数型 、 長整数型 、浮動小数点型 、および 複素数型 の4つの型があります。 詳しくは
ライブラリリファレンス 2.3.4 を見てください。

8.2. 配列

配列型には、文字列、ユニコード文字列、リスト、タプル、バッファ、そして xrange オブジェクトの 6つがあります。配列型に共通の演算を下の表にまとめます。
演算  結果 
x in s s のある要素 x と等しい場合 True 、そうでない場合 False
s + t s および t の結合
s * n , n * s s の浅いコピー n 個からなる結合
s[i] s の 0 から数えて i 番目の要素
s[i:j] si 番目から j 番目までのスライス
s[i:j:k] si 番目から j 番目まで、k 毎のスライス
len(s) s の長さ
min(s) s の最小の要素
max(s) s の最大の要素
# 例
>>> s='abcde'
>>> s[-1]      # インデックス -1 は最後の要素
'e'
>>> s[1:]      # 最初の要素を除く
'bcde'
>>> s[:-1]     # 最後の要素を除く
'abcd'
>>> s*2
'abcdeabcde'
>>> min(s)
'a'
>>> max(s)
'e'
>>> s[0:-1:2]
'ac'

8.2.1. 文字列、ユニコード文字列

文字列の要素に直接値を代入することは出来ません。
s = 'abcdefg'
# 不可、文字を直接代入できない。
s[0]='z'

# 次のようにして全体を作り直す必要がある。
s = 'z' + s[1:]

文字列リテラル

文字列リテラルについての詳細は
リファレンスマニュアル 2.4.1 を見てください。

文字列メソッド

ライブラリリファレンス 2.3.6.1 を見てください。

Memo:
文字列 line から末尾の改行文字を取り除くには、

line = line.rstrip('\n')
# あるいは、
import string
line = string.rstrip(line, '\n')
とします。ファイルから1行ずつ読み込むときよく使います。

文字列フォーマット

format % vars というように記述します。 format は C 言語風です。 vars が複数の場合 ( ) で くくる必要があります。 また、vars辞書型 を指定してキーワードで指定することも出来ます。 詳しくは ライブラリリファレンス 2.3.6.2 文字列フォーマット操作を見てください。
>>>'%d:%d' % (1, 2)
'1:2'
>>>'%(month)s %(date)d, %(year)4d' % {'year':2005, 'month':'February', 'date':3}
'February 3, 2005'

8.2.2. リスト

リストは [ ] でくくってあらわします。リストの各要素に直接値を代入できます。 また、リストはネストできます。
>>> ls=[1,2,3]
>>> ls[0]=100
>>> ls
[100, 2, 3]
>>> ls2=[ls, 10,20,30]
>>> ls2
[[100, 2, 3], 10, 20, 30]
リストの操作については ライブラリリファレンス 2.3.6.4 を見てください。

Memo:

8.2.3. タプル

タプルは (,) を使ってあらわします。変更できない点を除いてリストと同じです。 リストより高速です。変更するつもりがない値のセットはタプルとして定義すると良いでしょう。
なお、項が1つのタプルは項の後にカンマをつけて (item,) と書きます。

詳しくは チュートリアル 5.3. を見てください。

8.3. 辞書型

いわゆるハッシュ表です。数値、文字列、タプルを key として、対応する値を保持したり、取り出したりすることが出来ます。 初期化は、全体を { } でくくって、コロン ':' で対になった key:val のペアをコンマで区切ります。 代入や、削除が出来ます。 ある key が辞書に登録されているかは in を使って調べられます。
注意:リストは辞書型の key になれません。
例:
>>>days = {'sun':0, 'mon':1, 'tue':2, 'wed':3, 'thu':4, 'fri':5, 'sat':6}  # 初期化
>>>'sun' in days                                                           # 存在するか?
True
>>>month={}
>>>month['jan'] = 1                                                        # 代入
>>>month['jan'] += 1
>>>month['jan']
2
>>>del month['jan']                                                        # 削除
詳しくは
ライブラリリファレンス 2.3.7. を見てください。

9. 演算子

詳しくは、リファレンスマニュアル 2.5, 2.6 を見てください。

10. ライブラリーツアー

よく使うライブラリーを簡単に説明します。 詳しくは
ライブラリーリファレンスを見てください。

10.1. sys

sys.argv
コマンドラインから渡された引数のリストです。 sys.argv[0] はスクリプト自身で、実際の引数は sys.argv[1:] です。
sys.exit()
Python を終了するとき使います。
詳しくは ライブラリリファレンス 3.1 を見てください。

10.2. os

以下は抜粋。詳しくは ライブラリリファレンス 6.1 を見てください。
chdir(path)
現在の作業ディレクトリを path に設定します。
getcwd()
現在の作業ディレクトリを表現する文字列を返します。
listdir(path)
ディレクトリ内のエントリ名が入ったリストを返します。リスト内の順番は不定です。特殊エントリ '.' および '..' は、それらがディレクトリに入っていてもリストには含められません。
mkdir(path[, mode])
数値で指定されたモード mode をもつディレクトリ path を作成します。
remove(path)
ファイル path を削除します。
rename(src, dst)
ファイルまたはディレクトリ srcdst に名前変更します。
exec[l, le, lp, lpe, v, ve, vp, vpe]
外部プロセスを起動します。

10.3. os.path

exists, getatime, getmtime, getsize, isfile, isdir などの関数を含むモジュールです。 詳しくは ライブラリリファレンス 6.2. を見てください。

10.4. fileinput

Perl の "while(<>)" のように、コマンドラインの引数で与えられたファイルから入力します。
# fileinput を使わないと
for fname in sys.argv[1:]:
    f=file(fname)
    for line in f:
        (do something with line)
    f.close()

# fileinput を使うと
import fileinput
for line in fileinput.input():
    (do something with line)
詳しくは ライブラリリファレンス 5.15 を見てください。

10.5. re

正規表現のモジュールです。
  1. Python では、パターンをまず compile して、正規表現オブジェクトを 作ってから検索します。
  2. パターンは raw_string を使って書くのが便利です。
  3. 正規表現オブジェクトは match, finditer, split などのメソッドを持ちます。 詳しくは ライブラリリファレンス 4.2.4 を見てください。
  4. 正規表現オブジェクトで文字列を検索してマッチした部分文字列は、 マッチオブジェクトとして返されます。
  5. マッチオブジェクトから文字列を取り出したいときは group メソッドを使います。 また、start, end メソッドで マッチした部分文字列の位置を取り出せます。
詳しくは ライブラリリファレンス 4.2.5 を見てください。

例、HTML ファイルからリンクを取り出す。

#! /usr/bin/env python
# coding: shift_jis

"""
引数で与えられたファイルを検索してリンクをを探し、
それを rink.txt に書き出す。
"""

import sys

RINK = 'rink.txt'
A_HREF = re.compile("<a href ?= ?\"http://([^\"]+)\">([^<]+)</a>", re.S) 

#main
if __name__=='__main__':
    rink_hash={}
    for fname in sys.argv[1:]:
        f=file(fname, 'r')
        for m in A_HREF.finditer(f.read()):
            rink_hash[m.group(1)] = m.group(2)
        f.close()
    fout = file(RINK, 'w')
    for address, name in rink_hash.iteritems():
        fout.write("<li> <a href = \"http://%s\">%s</a>\n" % (address, name))
    fout.close()

10.6. shutil, filecmp, glob

shutil.copyfile
ファイルをコピーします。
filecmp.cmp
ファイルの比較をします。
glob.glob(pattern)
現在のディレクトリのエントリーのうち pattern のマッチするものを返します。
詳しくは、ライブラリリファレンス 6.7, 6.23, 6.25 を見てください。

10.7. datetime

日時を得るのに使います。 datetime time とほぼ同様ですが、time が 1970--2038 年しか扱えないのに対し、 datetime は それ以前もそれ以降も取り扱えます。
datetime.date.today()
現在のローカルな日付を得ます。
datetime.datetime.now()
現在のローカルな日付と時刻を得ます。
isoformat メソッド
日付と時刻を ISO 8601 形式の文字列にします。
>>> datetime.date.today().isoformat()
'2005-02-02'
>>> datetime.datetime.now().isoformat()
'2005-02-02T17:50:09.867000'
strftime
日時を書式に従って出力します。詳しくはライブラリリファレンス 6.9.7, 6.10 を見てください。
>>> datetime.datetime.now().strftime('%y-%m-%d: %H:%M:%S')
'05-02-02: 23:20:12'
>>> datetime.date.today().strftime('%y-%m-%d')
'05-02-02'

10.8. operator

add(a,b) (通常の書式では `a+b') や mul(a,b) (通常の書式では `a*b') を定義したモジュール。 reduce を使うとき便利。
>>> import operator as op
>>> reduce(op.add, [1,2,3,4,5])  # 1+2+3+4+5
15
詳しくは、 ライブラリリファレンス 3.10. operator -- 関数形式の標準演算子を見てください。

10.9. その他のモジュール

  1. 各種サービス
  2. 汎用オペレーティングシステムサービス
  3. オプションのオペレーティングシステムサービス
  4. Unix独特のサービス
  5. インターネットプロトコルとその支援

11. 付録

11.1. 真偽値を返す演算子と主な関数

モジュール 演算子、関数 機能 (True でない場合は False)
組み込み == 左辺と右辺が等しければ True。
組み込み != 左辺と右辺が等しくなければ True。
組み込み < 左辺が右辺より小さければ True。
文字列にも使える。例: 'abc' < 'ab' &rArr False
組み込み > 左辺が右辺より大きければ True。 文字列にも使える。
組み込み <= 左辺が右辺より小さいか、左辺と右辺が等しければ True。 文字列にも使える。
組み込み >= 左辺が右辺より大きいか、左辺と右辺が等しければ True。 文字列にも使える。
組み込み in 左辺が右辺に含まれていれば True。 例:
リスト: 1 in [1,2,3] &rArr True
文字列: 'ab' in 'abc' &rArr True
辞書: 'mon' in {'sun':0, 'mon':1, 'tue':2, 'wed':3} &rArr True
組み込み is 左辺と右辺が等しオブジェクトならば True。
ls1 = [1,2,3]
ls2 = [1,2,3]
ls3 = ls1
ls1 is ls2 &rArr False
ls1 is ls3 &rArr True
組み込み isinstance( object, classinfo) 引数 object が引数 classinfo のインスタンスであるか、 (直接または間接的な) サブクラスのインスタンスの場合 True。
組み込み issubclass( class, classinfo) class が classinfo の (直接または間接的な) サブクラスである場合に True。
文字列メソッド isalnum() 文字列中の全ての文字が英数文字 [a-zA-Z0-9] で、かつ 1 文字以上ある場合 True。
文字列メソッド isalpha() 文字列中の全ての文字が英文字 [a-zA-Z] で、かつ 1 文字以上ある場合 True。
文字列メソッド isdigit() 文字列中に数字しかない場合 True。
文字列メソッド islower() 文字列中の大小文字の区別のある文字全てが小文字で、かつ 1 文字以上ある場合 True。
文字列メソッド isspace() 文字列が空白文字だけからなり、かつ 1 文字以上ある場合 True。
文字列メソッド istitle() 文字列がタイトルケース文字列であり、かつ 1 文字以上ある場合、 すなわち大文字は大小文字の区別のない文字の後にのみ続き、 小文字は大小文字の区別のある文字の後ろにのみ続く場合 True。
文字列メソッド isupper() 文字列中の大小文字の区別のある文字全てが大文字で、かつ 1 文字以上ある場合 True。
os.path exists(path) path が存在する場合 True。
os.path isfile(path) path が存在する正しいファイルの場合 True。
os.path isdir(path) path がディレクトリの場合 True。
fileinput isfirstline() 最後に読み込まれた行がファイルの1行目なら True。
fileinput isstdin() 最後に読み込まれた行がsys.stdinから読まれていれば True。

11.2. web documents

  1. python.org
    1. ダウンロード
    2. ドキュメント
  2. 日本Pythonユーザ会
    1. 日本語訳ドキュメント
    2. 小さな実例集
    3. リンク集
  3. Dive Into Python: この文書と チュートリアルの次に 読む文書としてお勧めです。