Yomiage
メニュー

Python実践講座 07:Path・JSON・CSV・日時

更新 2026/9/27 6:22:11 公開

投稿者: しゅりりん

到達点は、データ形式と文字コードを明示して読み書きすることです。前提は第06回です。

データ形式には文法がある

JSONは辞書や配列などの構造、CSVは表形式のデータに使えます。CSVを単にカンマでsplitすると、引用符で囲んだカンマを壊します。自分で区切り規則を推測せず、形式に対応したライブラリを使います。

import csv
import io
import json
from pathlib import Path
from tempfile import TemporaryDirectory
from datetime import datetime, timezone

with TemporaryDirectory() as directory:
    path = Path(directory) / "study.json"
    data = {"language": "Python", "minutes": 25}
    path.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8")
    loaded = json.loads(path.read_text(encoding="utf-8"))
    print(loaded["minutes"])

buffer = io.StringIO(newline="")
writer = csv.writer(buffer)
writer.writerow(["題名", "分"])
writer.writerow(["型, 関数", 30])
buffer.seek(0)
print(list(csv.reader(buffer))[1])
instant = datetime(2026, 1, 1, tzinfo=timezone.utc)
print(instant.isoformat())

main.pyの出力は25、二つの列からなる行、UTCの日時です。「型, 関数」は一つの項目のまま復元されます。実ファイルをcsvで開くときも newline="" と文字コードを指定します。

読めることと信用できることは違う

json.loadsで文法的に読めても、minutesが整数とは限りません。外部入力は構造、型、値の範囲を検証してから使います。pickleは任意のPythonオブジェクトを復元できる一方、読み込み時にコード実行へつながるため、信頼できないファイルの交換形式には使いません。

Pathで扱う相対パスは、原則現在の作業ディレクトリから解決されます。プログラムのファイルが置かれた場所と同じとは限りません。保存先は引数や設定で明示すると、意図しない場所への保存を避けられます。

日時ではタイムゾーンのない値と、タイムゾーンのある値を区別します。ログの発生時刻はUTCのaware datetimeで保存し、表示時に地域へ変換すると整理しやすくなります。誕生日のような日付だけの値にはdateを使います。

練習と解答

練習:JSONのminutesを文字列の「25」へ変更した場合、読み込みは成功するでしょうか。

解答:JSONとしては有効なので成功します。計算へ使う前に、文字列を認めて変換するのか、型違いとして拒否するのかを決めます。「データ形式のパース」と「業務上の検証」は別です。

公式資料

pathlib、json、csv、datetimeを参照できます。


Python全20回の目次 | 前の回 | 次の回

このブラウザでは Web Speech API が利用できません。

1 / 16 · 停止中