1. ホーム
  2. python

Pythonモジュール早わかり(マークオンデマンド版)

2022-02-14 11:37:22

Python標準ライブラリ



  1. コアモジュール
  2. その他の標準モジュール
  3. スレッドとプロセス
  4. データ表現
  5. ファイル形式
  6. メール・ニュースメッセージの取り扱い
  7. ネットワークプロトコル
  8. 国際化
  9. マルチメディア関連モジュール
  10. データストレージ
  11. ツール・ユーティリティ
  12. その他のモジュール
  13. 実装支援モジュール
  14. その他のモジュール
  15. Py 2.0以降の新モジュール
  16. 追記

<ブロッククオート フレデリック」を役としたいところですが、何百人ものボランティアでも追いつかないでしょう。いや、'Fredrik'はhttpサーバーとスパムフィルターとemacsのwhatsitとその他のものを組み合わせた結果なんです。 <ブロッククオート -ゴードン・マクミラン、1998年6月

Python 2.0には、200以上のモジュールからなる拡張可能な標準ライブラリが付属しています。この本は、各モジュールを簡単に説明し、その使い方を説明するために少なくとも1つの例を提供します。この本には、合計360の例が含まれています。

0.1. 本について

<ブロッククオート 一日中インターネットに書き込むしか能のない人たちが、最も洞察力のある人たちであることは稀です。 <ブロッククオート - ヤコブ・ニールセン、1998年12月

5年前に偶然Pythonに出会い、Pythonの旅が始まり、多くの時間をかけて  comp.lang.python  ニュースグループで質問に答えています。もしかしたら誰かが、まさに自分が欲しいと思っていたモジュールを見つけたかもしれませんが、その使い方がわからなかったのかもしれません。もしかしたら、誰かが自分のタスクに対して間違ったモジュールを選んでしまったのかもしれません。新しい車輪を発明するのに飽きた人がいるかもしれません。たいていの場合、マニュアルよりも短い例のほうが役に立ちます。

本書は、標準ライブラリの隅々までカバーするために、3,000以上のニュースグループでの議論と、もちろん多くの新しいスクリプトの中から、最高のものを選び出しました。

それぞれのスクリプトが分かりやすく、コードの再利用がしやすいように心がけました。コメントは意図的に短くし、背景を深く知りたければ、各Pythonのリリースにあるリファレンスマニュアルを参照することができます。この本で重要なのは、サンプルコードです。

ご意見、ご感想、バグレポートなどありましたら、下記までお願いします。  [email protected] . すべてのメールに可能な限り目を通しますが、迅速な対応ができない場合があります。

本書の更新情報などは、以下をご覧ください。  http://www.pythonware.com/people/fredrik/librarybook.htm

なぜTkinterがないのですか?

この本では、(オプションの)Tkinter ui(ユーザインタフェース)ライブラリを除き、標準ライブラリ全体をカバーしています。これには多くの理由がありますが、時間やこの本のスペース、そして私がTkinterに関する別の本を執筆中であることが大きな理由です。

これらの書籍に関する情報は、以下をご覧ください。  http://www.pythonware.com/people/fredrik/tkinterbook.htm . (わざわざ読まなくてもいい、別の404)

<スパン 製品詳細

この本はDocBook SGMLで書かれており、Secret LabsのPythonWorks、Excosoft Documentor、James ClarkのJade DSSSLプロセッサ、Norm WalshのDocBookスタイルシート、そしてもちろん、いくつかのPythonスクリプトなど、さまざまなツールを使用しました。

校正者の方々に感謝します。Tim Peters, Guido van Rossum, David Ascher, Mark Lutz, and Rael Dornfest、そしてPythonWareのメンバーにも感謝します。Matthew Ellis, Håkan Karlsson, Rune Uhlin に感謝します。

Lenny Muellnerには、SGMLファイルをこの本にするのを手伝ってもらい、Christien Shangrawには、これらのコードファイルを付属のCD(以下のサイトで入手可能)に組み込んでもらいました。 http://examples.oreilly.com/pythonsl  奇跡的に404ではありません)。

0.2. コード規約

本書では、次のような使用上の決まりを設けています。

イタリック

ファイル名やコマンドに使用します。また、用語の定義にも使用される。

Equal-width fonts e.g. Python

<ブロッククオート コードや、メソッド、モジュール、演算子、関数、文、プロパティなどの名前に使用します。

Equal-Width Bold

コード実行結果について。

0.3. 例題について

言及されていない限り、すべての例は Python 1.5.2 と Python 2.0 の下で動きます。Python 2.4/2.5 で ...... を実行できるかどうかは、関係する翻訳者に依存します。

一部のプラットフォーム関連モジュールのスクリプトを除き、すべてのサンプルはWindows、Solaris、Linuxで問題なく実行できます。

すべてのコードには著作権があります。もちろん、これらのモジュールは自由に使うことができますし、どこから入手したのか(?)を忘れないでください。学んでください。

ほとんどのサンプルは、ファイル名に使用するモジュール名を含み、その後に"が続きます。 -example- と、一意のシリアルナンバーが記載されています。なお、いくつかの例は、この本の以前のバージョンと一致するように、順番に表示されていません。 (エフボットガイド) 標準パイソンライブラリ .

この本に付属していたCDの内容は、オンラインで確認することができます(  http://examples.oreilly.com/pythonsl ). 詳細や最新情報については http://www.pythonware.com/people/fredrik/librarybook.htm . (ft、また404です。読まないように気をつけてください〜)

0.4. お問い合わせ方法

パイソンジャングルQQグループ 43680167

フェザー(校正者)QQ:85660100


1. コアモジュール

<ブロッククオート C言語ランタイムライブラリに含まれる関数はWin32 APIの一部ではないため、このバグの影響を受けるアプリケーションは非常に限定的であると考えています" <ブロッククオート - マイクロソフト、1999年1月

1.1. はじめに

Pythonの標準ライブラリには、Python言語自体に固有の型や宣言から、一部のプログラムでのみ使用される無名のモジュールまで、さまざまなモジュールが含まれています。

この章では、基本的な標準ライブラリモジュールのいくつかを説明します。どんな大規模なPythonプログラムでも、これらのモジュールのほとんどを直接的または間接的に使用する可能性があります。

1.1.1. 組み込み関数と例外

次の2つのモジュールは、他のモジュールを合わせたものより重要です:組み込み関数(len, int, range ...など)の定義  _ _builtin_ _  すべての組み込み例外を定義するモジュール、および  exceptions  モジュールを使用します。

Pythonは起動時にこの2つのモジュールをインポートするので、どのプログラムでも使用することができます。

1.1.2. オペレーティング・システム・インターフェース・モジュール

Pythonには、POSIX標準APIと標準C言語ライブラリを利用したモジュールが多数あります。これらは、基盤となるオペレーティングシステムへのプラットフォーム非依存のインタフェースを提供します。

このカテゴリには以下のモジュールが含まれます: ファイルおよびプロセスのハンドリングを提供するモジュール  os  プラットフォームに依存しないファイル名処理 (ディレクトリ名、ファイル名、サフィックスなどの分割) を提供するモジュール。  os.path  モジュール、および time/datetime  モジュールになります。

[!Feather note: datetime is a new module in Py2.3, providing enhanced time handling]


その延長線上で、ネットワーキングやスレッディングのモジュールもこのカテゴリーに入る。Pythonはすべてのプラットフォーム/バージョンでそれらを実装しているわけではありませんが。

1.1.3. 型サポートモジュール

標準ライブラリには、組み込みの型操作をサポートするためのライブラリが多数存在します。  string  モジュールは一般的な文字列処理を実装しています。  math  モジュールは、数学の演算と定数を提供します(π、e はこのタイプの定数です)。  cmath  モジュールは、複素数の定数として  math  関数を使用します。

1.1.4. 正規表現

re  モジュールはPythonの正規表現サポートを提供します。正規表現は、文字列や特定の部分文字列をマッチさせるために使われる、構文に特化した文字列パターンです。

1.1.5. 言語サポートモジュール

sysモジュールでは、モジュール検索パスやインタプリタのバージョン番号など、インタプリタ関連のパラメータにアクセスすることができます。  operator  モジュールは、組み込みの演算子と同じことをする関数を提供します。  copy  モジュールはオブジェクトのコピーを可能にし、Python 2.0 の新機能として  gc  モジュールは、ガベージコレクションの制御を提供します。


1.2. __builtin_ __module

このモジュールには、Pythonで使用される組み込み関数が含まれています。通常、このモジュールを手動でインポートする必要はありません。Pythonがあなたのためにすべてを行います。

1.2.1. タプルや辞書を引数にした関数の呼び出し

Pythonでは関数の引数のリストをリアルタイムに作成することができます。すべての引数をタプルに入れ、関数を呼び出すには、組み込みの  apply  関数で呼び出すことができます。例えば  例1-1 .

1.2.1.1. 例1-1. apply 機能の使用

File: builtin-apply-example-1.py

def function(a, b):
    print a, b

apply(function, ("whither", "canada?"))
apply(function, (1, 2 + 3))

whither canada?
1 5


関数にキーワード引数を渡すには、辞書を  apply  関数を第3引数として使用する場合、以下のようになります。  例1-2 .

1.2.1.2. 例1-2. キーワード引数を渡すためのapply関数の使用

File: builtin-apply-example-2.py

def function(a, b):
    print a, b

apply(function, ("crunchy", "frog"))
apply(function, ("crunchy",), {"b": "frog"})
apply(function, (), {"a": "crunchy", "b": "frog"})

crunchy frog
crunchy frog
crunchy frog



apply

File: builtin-apply-example-3.py class Rectangle: def _ _init_ _(self, color="white", width=10, height=10): print "create a", color, self, "size", width, "x", height class RoundedRectangle(Rectangle): def _ _init_ _(self, **kw): apply(Rectangle._ _init_ _, (self,), kw) rect = Rectangle(color="green", height=100, width=100) rect = RoundedRectangle(color="blue", height=20) create a green  関数の一般的な使用法は、サブクラスからベースクラスへコンストラクタの引数を渡すことです。特に、コンストラクタが多くの引数を取る場合です。たとえば、次のような場合です。  例1-3  が表示されます。

1.2.1.3. 例1-3. apply 関数を使った基底クラスのコンストラクタの呼び出し

*

<長方形

 大きさ 100 x 100
青色を作成する 

<円形矩形

 サイズ 10 x 20



Python 2.0は同じことをするための別の方法を提供します。伝統的な関数呼び出しを使うだけです。  **  を使ってタプルをマークします。  result = function(*args, **kwargs) result = apply(function, args, kwargs)  を使って、辞書をマークアップしています。

次の二つの文は等価である。

import

1.2.2. モジュールの読み込みと再読み込み

大きなPythonのプログラムを書いたことがある人なら知っているはずです。  from-import  文は外部モジュールをインポートするために使われます(もちろん  import  のバージョン)。しかし、あまり知られていないかもしれませんが  _ _import_ _  実際には、組み込み関数  -plugin  が動作するようになります。

このトリックを使うと、関数を動的に呼び出すことができます。これは、モジュールの名前(文字列)しか知らない場合に便利です。  例1-4  はこの使い方を示しており、" で始まるすべての関数を動的にインポートしています。 File: builtin-import-example-1.py import glob, os modules = [] for module_file in glob.glob("*-plugin.py"): try: module_name, ext = os.path.splitext(os.path.basename(module_file)) module = _ _import_ _(module_name) modules.append(module) except ImportError: pass # ignore broken modules # say hello to all modules for module in modules: module.hello() example-plugin says hello モジュールで終わります。

1.2.2.1. 例1-4. _ _import_ _ 関数を使用したモジュールの読み込み

import

このプラグインモジュールは、ファイル名に "-"(ハイフン)が入っていることに注意してください。つまり、通常の  File: example-plugin.py def hello(): print "example-plugin says hello"  Pythonの識別子では"-"が使えないからです。

例 1-5  が表示されます。  例1-4  .NETで使用されているプラグイン

1.2.2.2. 例1-5. プラグイン例

File: builtin-import-example-2.py

def getfunctionbyname(module_name, function_name):
    module = _ _import_ _(module_name)
    return getattr(module, function_name)

print repr(getfunctionbyname("dumbdbm", "open"))



例1~6  は、与えられたモジュール名と関数名に基づいて、 望みの関数オブジェクトを取得する方法を示しています。

1.2.2.3. 例1-6. 特定の関数を取得するために_ _import_ _関数を使用する

string

<関数


また、この関数を使用して、モジュールの遅延ロードを実装することができます。例えば  例1-7  での  File: builtin-import-example-3.py class LazyImport: def _ _init_ _(self, module_name): self.module_name = module_name self.module = None def _ _getattr_ _(self, name): if self.module is None: self.module = _ _import_ _(self.module_name) return getattr(self.module, name) string = LazyImport("string") print string.lowercase abcdefghijklmnopqrstuvwxyz  モジュールは、最初に使用されたときのみインポートされます。

1.2.2.4. 例1-7. 遅延インポートのための_ _import_ _関数の使用

File: builtin-reload-example-1.py

import hello
reload(hello)
reload(hello)

hello again, and welcome to the show
hello again, and welcome to the show
hello again, and welcome to the show


Pythonはロードされたモジュールを再ロードするための基本的なサポートも提供します。[例 1-8 #eg-1-8 は 3 回ロードされます。  hello.py  ファイルを作成します。

1.2.2.5. 例 1-8. リロード機能の使用

[Note: ^ The original sentence is incomprehensible and will be discussed later.]


reloadは引数として直接モジュールを受け取ります。

from-import

モジュールをリロードすると、モジュールは再コンパイルされ、新しいモジュールがモジュール辞書内の古いモジュールを置き換えることに注意してください。しかし、元のモジュールのクラスで作成されたインスタンスは、まだ古いモジュールを使用しています(そして、更新されません)。

同様に  dir  モジュールコンテンツに直接作成されたものは、更新されません。

1.2.3. 名前空間について

dir  指定されたモジュール、クラス、インスタンス、またはその他の型のすべてのメンバーのリストを返します。これは対話的な Python インタープリタで有用かもしれませんが、他の場所でも使うことができます。  例1-9 が表示されます。  File: builtin-dir-example-1.py def dump(value): print value, "=>", dir(value) import sys dump(0) dump(1.0) dump(0.0j) # complex number dump([]) # list dump({}) # dictionary dump("string") dump(len) # function dump(sys) # module 0 => [] 1.0 => [] 0j => ['conjugate', 'imag', 'real'] [] => ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] {} => ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'update', 'values'] string => []  関数を使用します。

1.2.3.1. 例1-9. dir関数の使用

getmember

<組み込み

 => ['_ _doc_ _', '_ _name_ _',
    '_ _stderr_ _', '_ _stdin_ _', '_ _stdout_ _', 'argv',
    'builtin_module_names', 'copyright', 'dllhandle',
    exc_info'、'exc_type'、'exec_prefix'、'executable'。
...


例では 


例1-10


で定義されている 

File: builtin-dir-example-2.py

class A:
    def a(self):
        pass
    def b(self):
        pass

class B(A):
    def c(self):
        pass
    def d(self):
        pass

def getmembers(klass, members=None):
    # get a list of all class members, ordered by class
    if members is None:
        members = []
    for k in klass._ _bases_ _:
        getmembers(k, members)
    for m in dir(klass):
        if m not in members:
            members.append(m)
    return members

print getmembers(A)
print getmembers(B)
print getmembers(IOError)

['_ _doc_ _', '_ _module_ _', 'a', 'b']
['_ _doc_ _', '_ _module_ _', 'a', 'b', 'c', 'd']
['_ _doc_ _', '_ _getitem_ _', '_ _init_ _', '_ _module_ _', '_ _str_ _']


getmembers

 関数は、与えられたクラスによって定義されたすべてのクラスレベルのプロパティとメソッドを返します。

1.2.3.2. 例1-10. dir 関数を使ったクラスの全メンバーの検索

[Note: Dictionaries are unordered, while lists and tuples are ordered, and there is a discussion of ordered dictionaries on the web]


vars

vars  関数は順序付きリストを返します。あるメンバーの名前がリスト内で早く登場するほど、そのメンバーはクラス階層の上位に位置することになります。順序が重要でない場合は、リストの代わりに辞書を使用できます。

locals()

File: builtin-vars-example-1.py book = "library2" pages = 250 scripts = 350 print "the %(book)s book contains more than %(scripts)s scripts" % vars() the library book contains more than 350 scripts  関数は、各メンバーの現在値を含む辞書を返すという点では似ています。もしあなたが  def function(value): print value function(1) function(1.0) function("one") type  は、現在のローカルな名前空間で見える要素を返します (  File: builtin-type-example-1.py def dump(value): print type(value), value dump(1) dump(1.0) dump("one")  関数を使用します)。例えば 例1-11 は次のように表される。

1.2.3.3. 例 1-11. vars関数の使用

is

1.2.4. オブジェクトの種類を確認する

Pythonは動的型付け言語であり、与えられた変数名が異なる文脈で異なる型に束縛される可能性があることを意味します。次の例では、同じ関数が、整数、浮動小数点数、文字列に対して呼び出されています。

File: builtin-type-example-2.py

def load(file):
    if isinstance(file, type("")):
        file = open(file, "rb")
    return file.read()

print len(load("samples/sample.jpg")), "bytes"
print len(load(open("samples/sample.jpg", "rb"))), "bytes"


4672 bytes
4672 bytes


callable

apply  機能  例1-12  に示すように)、変数の型をチェックすることができます。この関数は  型記述子 これはPythonインタプリタが提供するそれぞれの型に対して異なるものです。

1.2.4.1. 例1-12. 型関数の使用

lambda

<タイプ

 1


<タイプ

 1.0


<タイプ

 一




それぞれのタイプには対応するタイプオブジェクトがあるので  _ _call_ _  演算子(object identity?)で型を確認することができます。(例  例1-13 を示す)。

1.2.4.2. 例1-13. ファイル名とファイルオブジェクトのための型関数の使用

File: builtin-callable-example-1.py

def dump(function):
    if callable(function):
        print function, "is callable"
    else:
        print function, "is *not* callable"

class A:
    def method(self, value):
        return value

class B(A):
    def _ _call_ _(self, value):
        return value

a = A()
b = B()

dump(0) # simple objects
dump("string")
dump(callable)
dump(dump) # function

dump(A) # classes
dump(B)
dump(B.method)

dump(a) # instances
dump(b)
dump(b.method)

0 is *not* callable
string is *not* callable


_ _call_ _  のような関数があります。  例1-14  を使用すると、オブジェクトが呼び出し可能かどうかを(直接または  operator ). 関数については、メソッド。  type  を実装した関数、クラス、および  isinstance  メソッドがあり、これらはすべてTrueを返します。

1.2.4.3. 例1-14. 呼び出し可能な関数の使用

isinstance

<ビルトイン

 は呼び出し可能
Aは呼び出し可能
Bは呼び出し可能


<アンバウンド

 は呼び出し可能です。



 は *not* callable です。



 は呼び出し可能です。


<メソッド

 は呼び出し可能です。






クラスオブジェクト(A、B)は呼び出し可能であり、呼び出されると新しいオブジェクト(クラスインスタンス)が生成されることに注意してください。しかし、クラス A のインスタンスは呼び出し可能ではありません。なぜなら、そのクラスには 

File: builtin-isinstance-example-1.py

class A:
    pass

class B:
    pass

class C(A):
    pass

class D(A, B):
    pass

def dump(object):
    print object, "=>",
    if isinstance(object, A):
        print "A",
    if isinstance(object, B):
        print "B",
    if isinstance(object, C):
        print "C",
    if isinstance(object, D):
        print "D",
    print

a = A()
b = B()
c = C()
d = D()

dump(a)
dump(b)
dump(c)
dump(d)
dump(0)
dump("string")



 メソッドを使用します。

を使用することができます。  issubclass  モジュールは、オブジェクトが組み込み型(数値、連番、辞書など)であるかどうかをチェックするための関数を見つけます。しかし、(基本的なシーケンスメソッドを実装したような)クラスを作るのは簡単なので、これらの型に対して明示的な型判定を行うのは良いアイデアではありません。

クラスとインスタンスを扱う場合は、もう少し複雑です。Pythonはクラスを本質的に型付けされたものとして扱いません。その代わりに、すべてのクラスは特別なクラス型であり、クラスのすべてのインスタンスは特別なインスタンス型になります。

つまり  isinstance  関数を使って、あるインスタンスが指定したクラスに属しているかどうかを調べます。この問題を解決するには  issubclass  この関数は、オブジェクトが与えられたクラス (またはそのサブクラス) のインスタンスであるかどうかをチェックします。  例1-15  が表示されます。  File: builtin-issubclass-example-1.py class A: pass class B: pass class C(A): pass class D(A, B): pass def dump(object): print object, "=>", if issubclass(object, A): print "A", if issubclass(object, B): print "B", if issubclass(object, C): print "C", if issubclass(object, D): print "D", print dump(A) dump(B) dump(C) dump(D) dump(0) dump("string") A => A B => B C => A C D => A B D 0 => Traceback (innermost last): File "builtin-issubclass-example-1.py", line 29, in ? File "builtin-issubclass-example-1.py", line 15, in dump TypeError: arguments must be classes  関数を使用します。

1.2.4.4. 例 1-15. isinstance関数の使用

eval


 => A



 => B



 => A C



 => A B D
0 =>
文字列 =>





File: builtin-eval-example-1.py def dump(expression): result = eval(expression) print expression, "=>", result, type(result) dump("1") dump("1.0") dump(""'string'") dump("1.0 + 2.0") dump("'*' * 10") dump("len('world')") 1 => 1  関数も同様で、あるクラスオブジェクトが与えられたクラスと同じか、あるいはそのサブクラスであるかをチェックするために使われます。例えば  例1-16  が表示されます。

注  eval  は任意のオブジェクトを引数として受け取りますが  _ _import_ _  関数は  TypeError  例外が発生します。

1.2.4.5. 例 1-16. issubclass 関数の使用法

os

1.2.5. Python 式の計算

Pythonは、プログラムでインタプリタと対話するための様々な方法を提供します。例えば  File: builtin-eval-example-2.py print eval("_ _import_ _('os').getcwd()") print eval("_ _import_ _('os').remove('file')") /home/fredrik/librarybook Traceback (innermost last): File "builtin-eval-example-2", line 2, in ? File "  関数は文字列を受け取り、それをPythonの式として評価します。文字列や単純な式を渡すこともできますし、Pythonの組み込み関数を使用することもできます。例えば  例1-17  が表示されます。

1.2.5.1. 例1-17. eval関数の使用

File: builtin-eval-example-1.py

def dump(expression):
    result = eval(expression)
    print expression, "=>", result, type(result)

dump("1")
dump("1.0")
dump(""'string'")
dump("1.0 + 2.0")
dump("'*' * 10")
dump("len('world')")

1 => 1 

<タイプ


1.0 => 1.0 

<タイプ


'文字列' => 文字列 

<タイプ


1.0 + 2.0 => 3.0 

<タイプ


'*' * 10 => **************************************************************************************************** 

<タイプ


len('world') => 5 

<タイプ







文字列ソースのセキュリティに不安がある場合は  eval  を使用する場合、何らかのトラブルに巻き込まれる可能性があります。例えば、あるユーザが  _ _import_ _  関数で読み込むことができます。  os  モジュールを作成し、ハードディスクからファイルを削除します (例.  例1-18  を表示します)。

1.2.5.2. 例1-18. eval関数による任意のコマンドの実行

File: builtin-eval-example-2.py

print eval("_ _import_ _('os').getcwd()")
print eval("_ _import_ _('os').remove('file')")

/home/fredrik/librarybook
Traceback (innermost last):
 File "builtin-eval-example-2", line 2, in ?
 File "

<文字列

0行目、?
os.error: (2, 'そのようなファイルまたはディレクトリがありません')


ここでは  os.error  例外が発生します。  Pythonは実際にファイルを削除しようとしているのです!

幸いなことに、この問題は簡単に解決することができます