Python3 標準ライブラリ概要

Python 標準ライブラリは非常に大規模で、提供されるコンポーネントは非常に広範囲に及びます。標準ライブラリを使用すると、さまざまなタスクを簡単に完了することができます。

以下は Python3 標準ライブラリのモジュールの一部です:

  • os モジュール:os モジュールは、ファイルやディレクトリの作成・移動・削除、環境変数へのアクセスなど、オペレーティングシステムと対話する多くの関数を提供します。

  • sys モジュール:sys モジュールは、インタープリタのバージョンやパス、stdin・stdout・stderr に関連する情報など、Python インタープリタおよびシステムに関連する機能を提供します。

  • time モジュール:time モジュールは、現在時刻の取得、日付と時刻のフォーマット、計時など、時間を処理する関数を提供します。

  • datetime モジュール:datetime モジュールは、タイムゾーンの処理、時間差の計算、日付差の計算など、より高度な日付と時刻の処理関数を提供します。

  • random モジュール:random モジュールは、ランダムな整数・浮動小数点数・シーケンスの生成など、乱数を生成する関数を提供します。

  • math モジュール:math モジュールは、三角関数、対数関数、指数関数、定数などの数学関数を提供します。

  • re モジュール:re モジュールは、テキストの検索、置換、分割などに使用できる正規表現処理関数を提供します。

  • json モジュール:json モジュールは JSON エンコード・デコード関数を提供し、Python オブジェクトを JSON 形式に変換したり、JSON 形式から Python オブジェクトを解析したりできます。

  • urllib モジュール:urllib モジュールは、ファイルのダウンロード、POST リクエストの送信、Cookie の処理など、Webページへのアクセスと URL を処理する機能を提供します。

オペレーティングシステムインターフェース

os モジュールは、ファイルやディレクトリの操作など、オペレーティングシステムに関連する多くの関数を提供します。

実例

import os

# 現在の作業ディレクトリを取得
current_dir = os.getcwd()
print("現在の作業ディレクトリ:", current_dir)

# ディレクトリ内のファイルを一覧表示
files = os.listdir(current_dir)
print("ディレクトリ内のファイル:", files)

使用することをお勧めしますimport osスタイルではなくfrom os import *、これにより、オペレーティングシステムによって異なるos.open()組み込み関数 open() を上書きしないことを保証します。

os のような大規模なモジュールを使用するとき、組み込みの dir() 関数と help() 関数は非常に役立ちます:

>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>

日通常のなファイル・ディレクトリ管理タスクには、:mod:shutil モジュールが使いやすい高レベルインターフェースを提供します。

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')

ファイルワイルドカード

glob モジュールは、ディレクトリのワイルドカード検索からファイルリストを生成する関数を提供します:

実例

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

コマンドライン引数

一般的なユーティリティスクリプトはコマンドライン引数をよく使用します。これらのコマンドライン引数は、sys モジュールの argv 変数にリスト形式で格納されます。例えば、コマンドラインで "python demo.py one two three" を実行すると、次のような出力結果が得られます:

実例

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

エラー出力のリダイレクトとプログラム終了

sys には stdin、stdout、stderr 属性もあります。stdout がリダイレクトされていても、stderr は警告メッセージやエラーメッセージの表示に使用できます。

実例

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

ほとんどのスクリプトの終了処理ではsys.exit()。


文字列の正規表現マッチング

reモジュールは高度な文字列処理に正規表現ツールを提供します。複雑なマッチングや処理に対して、正規表現は簡潔で最適化されたソリューションを提供します:

実例

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

単純な機能だけで十分な場合は、文字列メソッドを最初に検討すべきです。非常にシンプルで、読みやすく、デバッグしやすいからです:

>>> 'tea for too'.replace('too', 'two')
'tea for two'

数学

mathモジュールは浮動小数点演算のために基盤となる C 関数ライブラリへのアクセスを提供します:

実例

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

random乱数を生成するツールを提供します。

実例

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4

インターネット\nアクセス

インターネットにアクセスし、ネットワーク通信プロトコルを処理するためのモジュールがいくつかあります。その中で最も単純な2つは、urls から受信したデータを処理する urllib.request と、電子メールを送信するための smtplib です:

実例

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Beware the Ides of March.
... """
)
>>> server.quit()

2番目の例では、ローカルで実行中のメールサーバーが必要なことに注意してください。


日付と時刻

datetimeモジュールは日付と時刻の処理に、単純な方法と複雑な方法の両方を提供します。

日付と時刻のアルゴリズムをサポートすると同時に、より効率的な処理と出力のフォーマットに重点を置いています。

実例

import datetime

# 現在の日付と時刻を取得
current_datetime = datetime.datetime.now()
print(current_datetime)

# 現在の日付を取得
current_date = datetime.date.today()
print(current_date)

# 日付をフォーマット
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)  # 出力:2023-07-17 15:30:45

出力結果は次のとおりです:

2023-07-17 18:37:56.036914
2023-07-17
2023-07-17 18:37:56

このモジュールはタイムゾーンの処理もサポートしています:

>>> # 导入了 datetime 模块中的 date 类
>>> from datetime import date
>>> now = date.today()    # 当前日期
>>> now
datetime.date(2023, 7, 17)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'07-17-23. 17 Jul 2023 is a Monday on the 17 day of July.'

>>> # 创建了一个表示生日的日期对象
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday   # 计算两个日期之间的时间差
>>> age.days             # 变量age的days属性,表示时间差的天数
21535

データ圧縮

以下のモジュールは、一般的なデータパッキングおよび圧縮形式を直接サポートしています:zlib、gzip、bz2、zipfile、tarfile。

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

パフォーマンス測定

同じ問題を解決するさまざまな方法間のパフォーマンスの違いを知りたいユーザーもいます。Python は、これらの質問に直接的な答えを提供する測定ツールを提供しています。

例えば、タプルのパッキングとアンパッキングを使用して要素を交換する方法は従来の方法よりも魅力的に見えますが、timeit は現代的な方法の方が高速であることを証明しています。

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

timeit の細かい粒度とは対照的に、:mod:profile モジュールと pstats モジュールは、より大きなコードブロック向けの時間測定ツールを提供します。


テストモジュール

高品質なソフトウェアを開発する方法の1つは、すべての関数に対してテストコードを作成し、開発中に頻繁にテストを実行することです。

doctest モジュールは、モジュールをスキャンし、プログラムに埋め込まれたドキュメント文字列に基づいてテストを実行するツールを提供します。

テストの構築は、その出力結果をドキュメント文字列に切り取って貼り付けるのと同じくらい簡単です。

ユーザーが提供した例を通じてドキュメントを強化し、doctest モジュールがコードの結果がドキュメントと一致するかどうかを確認できるようにします:

def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # 自动验证嵌入测试

unittest モジュールは doctest モジュールほど簡単には使用できませんが、独立したファイルでより包括的なテストセットを提供できます:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

以上で見たのは Python3 標準ライブラリのモジュールの一部にすぎません。他にも多くのモジュールがあり、完全な標準ライブラリのドキュメントは公式ドキュメントで確認できます:https://docs.python.org/zh-cn/3/library/index.html

その他の拡張