標準モジュール

Pythonには標準で多数のモジュールが同梱されています。あまりに数が多いため全て把握するのは大変ですが、有用なモジュールを押さえておけば開発効率は飛躍的にアップします。

os

document:http://www.python.jp/doc/release/library/os.html

ファイルとディレクトリを扱うモジュールです。色々な機能がありますが、特に使用頻度の高い関数を紹介します。

  • os.path - ファイルパスをいじくる

joinでファイルパスを繋げます。 +演算子やフォーマット文字列を使った結合と違い、不正なパスが生成されません。

>>> import os
>>> path = os.path.join('/home/bucho', 'show.jpg')
>>> print path
/home/bucho/show.jpg


>>> dir = '/home/bucho'
>>> name = 'show.jpg'
>>> path = dir + name
>>> print path
/home/buchoshow.jpg  # 意図しないパスになってしまう

existsでファイル/ディレクトリの存在チェックを行えます。

>>> os.path.exists(path)
True

dirnameでディレクトリパスが得られます

>>> os.path.dirname(path)
'/home/bucho'

splitextでパスを拡張子とそれ以外に分割できます

>>> name, ext = os.path.splitext(path)
>>> print name
/home/bucho/show
>>> print ext
.jpg
  • os.walk - ファイルとディレクトリの一覧を得る

検索対象パスを指定してos.walkを呼び出すと、検索パス, パスに含まれるフォルダ名のリスト, パスに含まれるファイル名のリストの3要素タプルを生成するジェネレータが返ります。 最初に渡した検索パス以下のすべてのファイル/フォルダが再帰的に検索されます。

>>> import os
>>> for path, folders, files in os.walk('/home/bucho'):
...     for file in files:
...         print path + file
...
...
/home/bucho/daisuki.3gp
/home/bucho/hagesii.wmv
/home/bucho/tof.jpg
/home/bucho/wozozo.bmp
/home/bucho/.ero/show.jpg
/home/bucho/.ero/hide/show.jpg

re

document:http://www.python.jp/doc/release/library/re.html

正規表現を扱うモジュールです。

正規表現内ではバックスラッシュが頻出するため、raw文字列(r’‘)を使って記述するのが良いでしょう。

正規表現にマッチするとMatchObjectが返ります。

>>> import re
>>> match_obj = re.search(r'(\d+)$', 'aita255')
>>> print match_obj.group(1)
255

何度もマッチングを繰り返す場合は、コンパイル済み正規表現オブジェクトを使うことで負荷を軽減することも出来ます。

>>> compiled = re.compile(r'(\d+)$')
>>> compiled.search(...

pdb

document:http://www.python.jp/doc/release/library/pdb.html

pythonのデバッガです。

set_traceを実行すると、コードの実行を途中で停止し、デバッグ用のプロンプトが表示されます。実際に動作している時のコードの状態を確認できるため、非常に有用です。

>>> import pdb;pdb.set_trace()
>>> if xxx == yyy:
...     zzz = True
...

上記のコード例の1行目が実行されると、実行が一旦停止されてpdbのプロンプトが表示されます。

プロンプト上では通常のインタプリタと同じようにコードを実行できるほか、停止させている実行を1行分進める/実行中のコードを表示する/強制終了するなどの操作が行えます。

n:実行を1行分だけ進めます。
c:pdbを終了し、スクリプトの実行を再開します。
q:スクリプトの実行を強制的に終了します。
s:実行しようとしている関数の内部に進みます。

datetime

document:http://www.python.jp/doc/release/library/datetime.html

日付と時刻のデータを扱うモジュールです。

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2011, 10, 15, 9, 41, 00, 000000)

>>> gantan = datetime(2012, 1, 1, 0, 0, 0)
>>> gantan.year
2012

日付のみを扱うdateもあります。

>>> from datetime import date
>>> date.today()
datetime.date(2011, 10, 15)

timedeltaを使うと、日付/時間の加減算ができます。

>>> from datetime import datetime, timedelta
>>> dt = datetime.now()
>>> dt
datetime.datetime(2011, 10, 15, 9, 41, 00, 000000)
>>> dt + timedelta(days=3)
datetime.datetime(2011, 10, 18, 9, 41, 00, 000000)

random

document:http://www.python.jp/doc/release/library/random.html

乱数を生成します。

random関数は0〜1の範囲の小数をランダムに返します。

>>> import random
>>> random.random()
0.6130030617573102
>>> random.random()
0.038878091500788026

randint関数は第一引数**以上**、第二引数**以下**の整数値をランダムに返します。

>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
8
>>> random.randint(1, 10)
10

urllib, urllib2

document:http://www.python.jp/doc/release/library/urllib2.html , http://www.python.jp/doc/release/library/urllib.html

URLを開くモジュールです。2.x系ではurllibとurllib2が混在していますが、urllib2の方が色々と優れているため、こちらを利用するのがよいでしょう。

urllib2.urlopenに対象URLを渡して呼び出すと、コンテンツが格納されたfile-like objectが返ります。

>>> import urllib2
>>> result = urllib2.urlopen('http://www.beproud.jp/')
>>> print result.read()  # file-like objectなのでreadで読み出します。
<!DOCTYPE html>
<html>
    <head>
        <title>HOME | 株式会社ビープラウド</title>
        <meta http-equiv="Content-Language" content="ja" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="description" content="株式会社ビープラウド Be PROUD [IT High Technology &amp; Human Centric Company]" />
        ...

urlopenのdata引数にapplication/x-www-form-urlencoded形式の文字列を渡すと、POSTリクエストとなります。

app...endoced形式の文字列は、urllib.urlencode関数で簡単に生成することができます。

ちなみに

urlencode関数は**urllib**モジュールの関数です。

>>> import urllib, urllib2
>>> post_data = urllib.urlencode({
        'name': 'spam',
    })
>>> result = urllib2.urlopen('http://aita.jp/tabetai/', data=post_data)

エラーはHTTPError例外としてraiseされます

>>> result = urllib2.urlopen('http://www.beproud.jp/bucho.ero')
HTTPError: HTTP Error 404: Not Found

openerオブジェクトを作成し、ハンドラの設定を行うことで様々な形式でのリクエストが可能です。

>>> # ベーシック認証のハンドラを追加します
>>> basic_auth = urllib2.HTTPBasicAuthHandler("Bucho's secret folder", "http://www.beproud.jp/bucho.ero/", 'bucho', 'show')
>>> opener = urllib2.build_opener(basic_auth)
>>> result = opener.open('http://www.beproud.jp/bucho.ero/')

json

document:http://www.python.jp/doc/release/library/json.html

jsonを扱うモジュールです。urllib2との組み合わせで使われることが多いかと思います。

json.loadsにjson文字列を渡すと、Pythonのオブジェクトにマッピングされます。

>>> import json
>>> aita = json.loads('''{
        "result": {
            "organization": "BeProud inc",
            "age": 24,
            "name": "aita",
            "like": [
                "onigiri",
                "hamburger",
                "gyudon",
                "oomori"
            ]
        }
    }''')
>>> aita['result']['like']
[u'onigiri', u'hamburger', u'gyudon', u'oomori']

json.dumpsにリストや辞書オブジェクトを渡すとjson文字列を返してくれます。

>>> json.dumps({
        'result': {
            'name': 'aita',
            'organization': 'BeProud inc',
            'age': 24,
            'like': ['onigiri', 'hamburger', 'gyudon', 'oomori']
        }
    })
'{"result": {"organization": "BeProud inc", "age": 24, "name": "aita", "like": ["onigiri", "hamburger", "gyudon", "oomori"]}}'

Project Versions

目次

前のトピックへ

関数

次のトピックへ

Appendix: パッケージ管理ツール

このページ