モジュールと入出力の要点
内容の確認日: 2026-10-04
この分野は「Pythonチュートリアル」の第 6 章 (モジュール) と第 7 章 (入力と出力) に対応します。前半はモジュールの読み込み方と、スクリプトとして実行されたかを判定する __name__、後半は文字列の書式化とファイルの読み書きが問われます。
出題項目は「モジュール」「入出力と書式化」の 2 つです。書式指定 (:>6・:05d・:.2f など) の結果を答える問題がよく出るので、実際の出力を確かめながら覚えましょう。
モジュールの読み込み
モジュールは、関数やクラスなどを定義した .py ファイルです。import の書き方によって、使うときの名前が変わります。
・import math: math.sqrt(16) のようにモジュール名を付けて使う
・from math import sqrt, pi: sqrt(16) のように名前だけで使える
・import statistics as st・from math import pi as PI: 別名を付ける
・from math import *: _ で始まる名前以外をまとめて取り込む (どの名前が入ったか分かりにくいので、実務では避ける)
モジュールを直接スクリプトとして実行したときは、そのモジュールの __name__ が "__main__" になります。import されたときは、__name__ はモジュール名です。そのため、if __name__ == "__main__": の中に書いた処理は、直接実行したときだけ動きます。
import mathfrom math import sqrt, pi as PIimport statistics as stprint(math.floor(2.7), sqrt(16), round(PI, 3))print(st.mean([1, 2, 3]))print(__name__)if __name__ == "__main__": print("直接実行された")python3 main.py 2 4.0 3.142 2 __main__ 直接実行された
import したモジュールは、sys.path に並んだディレクトリ (実行したスクリプトのディレクトリ、環境変数 PYTHONPATH、インストール先など) の順に探されます。モジュールは 1 回の実行につき 1 回だけ読み込まれます。dir(モジュール) でモジュールが定義している名前の一覧を調べられます。
複数のモジュールをディレクトリにまとめたものをパッケージと呼び、import sound.effects.echo のようにドットでつないで読み込みます。パッケージのディレクトリに置く __init__.py には、パッケージを読み込んだときの初期化処理や、from パッケージ import * で読み込む名前の一覧 __all__ を書けます。
文字列の書式化
f-string (f"...") の { } の中には、: の後ろに書式指定を書けます。
・{name:>6}: 幅 6 で右寄せ (< は左寄せ、^ は中央)
・{score:05d}: 幅 5 の整数で、足りない桁を 0 で埋める
・{ratio:.2f}: 小数点以下 2 桁の固定小数点
・{ratio:.1%}: 100 倍してパーセント表記 (小数点以下 1 桁)
・{n:,}: 3 桁ごとにカンマを入れる
str.format() では、{0}・{1} で引数の位置を、{name} でキーワード引数を指定します。同じ番号を何度使っても構いません。古い書き方の % 演算子 ("%d 点" % 87) も使えます。
str() は人が読みやすい文字列を、repr() はそのオブジェクトを表す文字列 (文字列なら ' で囲んだ形) を返します。文字列のメソッドの rjust(幅)・ljust(幅)・center(幅) は空白で埋めて寄せ、zfill(幅) は左を 0 で埋めます。
name, score, ratio = "Sato", 87, 0.8768print(f"[{name:>6}|{score:05d}|{ratio:.1%}|{ratio:.2f}|{1234567:,}]")print("{1}-{0}-{1}".format("A", "B"), "{n} 点".format(n=score))print(str("abc"), repr("abc"), repr(1.5))print("5".rjust(3), "5".zfill(3), "ab".ljust(4) + "|", "%d 点 (%s)" % (score, name))python3 main.py [ Sato|00087|87.7%|0.88|1,234,567] B-A-B 87 点 abc 'abc' 1.5 5 005 ab | 87 点 (Sato)
ファイルの読み書き
ファイルは open(ファイル名, モード, encoding=...) で開きます。主なモードは "r" (読み込み。省略時)・"w" (書き込み。既存の内容は消える)・"a" (末尾に追記)・"b" (バイナリ。"rb" のように組み合わせる) です。
with open(...) as f: の形で開くと、ブロックを抜けたときに (例外が起きても) 自動でファイルが閉じられます。write() は書き込んだ文字数を返します。print(..., file=f) でも書き込めます (末尾に改行が付きます)。
読み込みは、read() で全体を 1 つの文字列に、readline() で 1 行ずつ、for line in f: でも 1 行ずつ取り出せます。1 行には末尾の改行 \n が含まれるので、rstrip() などで取り除いてから使います。
with open("memo.txt", "w", encoding="utf-8") as f: n = f.write("one\n") print("two", file=f)print(n, f.closed)with open("memo.txt", encoding="utf-8") as f: for line in f: print(line.rstrip())with open("memo.txt", "a", encoding="utf-8") as f: f.write("three\n")with open("memo.txt", encoding="utf-8") as f: print(f.read().splitlines())python3 main.py 4 True one two ['one', 'two', 'three']
json によるデータの保存
リストや辞書のような構造を持つデータは、json モジュールで JSON 形式の文字列に変換して保存すると便利です。json.dumps() は Python のオブジェクトを JSON の文字列に、json.loads() は JSON の文字列を Python のオブジェクトに変換します。ファイルに直接読み書きするときは json.dump(obj, f)・json.load(f) を使います。
import jsontext = json.dumps({"name": "Sato", "tags": ["a", "b"], "ok": True})print(text)data = json.loads(text)print(type(data), data["tags"][1])python3 main.py {"name": "Sato", "tags": ["a", "b"], "ok": true} <class 'dict'> b
JSON では、Python の True は true、None は null になり、文字列は必ず " で囲まれます。
試験でよくある引っかけ
import mathの後の呼び出しimport mathではmath.sqrt(16)と書きます。sqrt(16)だけではNameErrorです。__name__の値直接実行したスクリプトの
__name__は"__main__"、importされたモジュールではモジュール名です。書式指定の
%f"{0.8768:.1%}"は87.7%です。100 倍してから丸めます。str()とrepr()文字列
abcをrepr()すると'abc'のように引用符が付きます。"w"モードの上書き"w"で開くと既存の内容は消えます。追記するには"a"を使います。withとファイルのクローズwithのブロックを抜けると、ファイルは自動で閉じられます (f.closedがTrue)。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
- Python エンジニア育成推進協会「Python 3 エンジニア認定基礎試験」
- Python ドキュメント「Python チュートリアル」6. モジュール
- Python ドキュメント「Python チュートリアル」7. 入力と出力
- Python ドキュメント「書式指定ミニ言語仕様」
コード例は、実際に実行して結果を確認しています。