第10章 標準ライブラリめぐり(40問中4問)
Python3基礎試験の標準ライブラリ:やりたいこと別のモジュール一覧
第10章は、やりたいことに合うモジュールを選ぶ問題が中心です。このページでは、公式チュートリアルが取り上げるモジュールを12の目的に分け、正規表現・統計・日付・圧縮の出力はPython 3.9.6で実際に実行して確かめます。覚えるのは、目的とモジュール名の組、そして import os と from os import * の違いなど、紛らわしい4つの組み合わせです。
このページは試験の学習用の整理です。公式の問題は転載せず、コードはすべて説明用に作った例です。
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-09-18。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- OS操作は os、ファイルのコピー・移動は shutil、ワイルドカード検索は glob、引数は sys.argv か argparse
- 文字列の高度な処理は re、数学は math、乱数は random、平均・中央値・分散は statistics
- 日付は datetime、圧縮は zlib、小さなコード片の時間計測は timeit、テストは doctest か unittest
- from os import * は os.open() が組み込みの open() を遮蔽するので避け、import os と書く
やりたいこと別のモジュール一覧
公式チュートリアルの第10章は、標準ライブラリを用途ごとに紹介しています。試験では、目的を示してモジュールを選ばせる形が考えられるので、左の列の目的から右の列のモジュールを引けるようにしておきます。
| やりたいこと | モジュール | 代表的な関数・クラス | ひとこと |
|---|---|---|---|
| OSと対話する・作業ディレクトリを扱う | os | os.getcwd()・os.chdir() | from os import * ではなく import os を使う |
| ファイルのコピー・移動 | shutil | shutil.copyfile()・shutil.move() | 日常的なファイル管理向けの高水準インターフェース |
| ワイルドカードでファイルを探す | glob | glob.glob('*.py') | ファイル名のリストを返す |
| コマンドライン引数を受け取る | sys / argparse | sys.argv・ArgumentParser | 単純なら sys.argv、オプション処理なら argparse |
| エラーメッセージを別に出す | sys | sys.stderr | stdout をリダイレクトしても読める |
| 正規表現で文字列を処理する | re | re.findall()・re.sub() | 単純な処理は文字列メソッドの方が読みやすい |
| 数学関数・乱数・統計 | math / random / statistics | math.cos()・random.sample()・statistics.mean() | 平均・中央値・分散を計算できる |
| URLからデータ取得・メール送信 | urllib.request / smtplib | urlopen()・SMTP().sendmail() | 取得は urllib、送信は smtplib |
| 日付・時刻の計算と書式化 | datetime | date.today()・strftime() | 日付同士の引き算で経過日数が求まる |
| データの圧縮・展開 | zlib ほか | zlib.compress()・zlib.decompress() | gzip・bz2・lzma・zipfile・tarfile も同じ系統 |
| 実行時間の計測 | timeit / profile・pstats | Timer().timeit() | 小さなコード片は timeit、大きなブロックは profile |
| テスト | doctest / unittest | doctest.testmod()・unittest.main() | docstring内か、別ファイルのクラスか |
このほか、公式チュートリアルは json(JSONの解析)、csv(CSVの読み書き)、sqlite3(SQLiteのラッパー)、email(電子メールの管理)、xml.etree.ElementTree(XML処理)なども標準で使えるモジュールとして紹介しています。データ形式の名前がそのままモジュール名になっているものは、名前から用途を引けます。
実行結果で確かめる
公式チュートリアルが示す例のうち、結果が1行で確かめられるものをPython 3.9.6で実行しました。出力を読み取る問題では、返り値の型とリストの中身が問われます。
| コード | 実行結果 | ひとこと |
|---|---|---|
import re
print(re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')) | ['foot', 'fell', 'fastest'] | f で始まる単語をすべてリストで返す |
import re
print(re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')) | cat in the hat | 重複した単語を1つにまとめる |
import math
print(math.log(1024, 2)) | 10.0 | 底を2とする対数。整数ではなく浮動小数点で返る |
import statistics
print(statistics.mean([20, 30, 70]))
print(statistics.median([1, 3, 2, 10])) | 40
2.5 | mean は平均、median は中央値。偶数個の中央値は中央2つの平均 |
import datetime as dt
print(dt.date(2026, 10, 28) - dt.date(2026, 10, 1)) | 27 days, 0:00:00 | 日付同士の引き算は timedelta になる |
import datetime as dt
print(dt.date(2026, 10, 28).strftime('%Y/%m/%d')) | 2026/10/28 | strftime で書式を指定して文字列にする |
import zlib
s = b'witch which has which witches wrist watch'
c = zlib.compress(s)
print(len(s), len(c), zlib.decompress(c) == s) | 41 37 True | 圧縮して元に戻せる。短い文字列では縮みが小さい |
日付同士の引き算は日数の差(timedelta)になり、re.findall() は一致した部分のリストを返します。公式チュートリアルは、re は高度な処理のためのもので、最小限の機能だけが必要なら読みやすくデバッグしやすい文字列メソッドの方がお勧めだと述べています。
紛らわしい組み合わせ
import os と from os import *
公式チュートリアルによると、from os import * を使うと os.open() が組み込みの open() を遮蔽します。そのため、import os を使うよう勧めています。名前を取り込みすぎると、同じ名前の組み込み関数が隠れる、と覚えます。
sys.argv と argparse
sys.argv にはコマンドライン引数がリストで入ります。demo.py を python demo.py one two three と呼ぶと、sys.argv は ['demo.py', 'one', 'two', 'three'] です。先頭の要素はスクリプト名で、引数は2番目からです。オプションの処理まで必要なら、ArgumentParser で作り、add_argument() で定義し、parse_args() で解析する argparse を使います。
doctest と unittest
doctest は docstring 内のサンプル実行結果を検査し、doctest.testmod() で走らせます。unittest は別ファイルに書き、unittest.TestCase を継承したクラスに assertEqual() や assertRaises() を使うテストメソッドを書いて、unittest.main() で実行します。docstring の中に書くのが doctest、クラスとして別に書くのが unittest です。
timeit と profile
timeit は Timer にコード文字列を渡して小さなコード片の実行時間を計ります。profile と pstats は、より大きなコードブロックで処理時間のボトルネックを判定する道具です。計る範囲が小さければ timeit、大きければ profile です。
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
第10章の標準ライブラリは、何問出ますか?
このサイトが整理した公式の章別出題数では、40問中4問(10.0%)です。第4章・第5章・第3章に次ぐ位置づけ(第8章と同数)で、モジュール名と役割を結びつける問題が中心になります。
import os と from os import * は、なぜ分けて覚えるのですか?
公式チュートリアルによると、from os import * を使うと os.open() が組み込みの open() を遮蔽してしまうため、import os を使うよう勧めています。ファイルを開く open() の動きが変わってしまうのが理由です。
doctest と unittest は、どう違いますか?
doctest は docstring に埋め込んだ実行例を自動で検査し、doctest.testmod() で走らせます。unittest は別ファイルにテストコードを書く形式で、unittest.TestCase を継承したクラスにテストメソッドを書き、unittest.main() で全テストを実行します。
timeit と profile は、どう使い分けますか?
公式チュートリアルによると、timeit は小さなコード片の実行時間を計測する道具です。profile と pstats は、それより大きなコードブロックで処理時間のボトルネックを見つけるときに使います。
