基礎から学ぶPython入門 90日コース | 実践Python - Day 16:標準ライブラリ

90日で身につけるPython
スポンサーリンク
スポンサーリンク
  1. Day 16:標準ライブラリで「できることの幅」を一気に広げる
  2. os:OS(フォルダや環境)と会話するための道具
    1. カレントディレクトリとファイル一覧を確認する
    2. ディレクトリを作る
  3. pathlib:パス(ファイル・フォルダ)を安全に扱うための道具
    1. Pathオブジェクトの基本
    2. ファイルの存在確認と作成
  4. datetime:日付と時刻を扱うための道具
    1. 現在時刻を取得して表示する
    2. 日付の差を計算する
  5. random:ランダムな値を扱うための道具
    1. ランダムな整数・小数を生成する
    2. リストからランダムに選ぶ・シャッフルする
  6. math:数学的な計算をするための道具
    1. 基本的な関数と定数
    2. 切り上げ・切り捨て・四捨五入
  7. statistics:簡単な統計量を計算するための道具
    1. 平均・中央値・分散・標準偏差
  8. Day 16のミニテンプレート:標準ライブラリお試しスクリプト
  9. Day 16のまとめ
  10. Day 16:標準ライブラリで「ファイル情報取得ツール」を作る
  11. 作るものの全体像をイメージする
    1. ファイル情報取得ツールの機能
  12. pathlib と os で「フォルダとファイル」を扱う
    1. ユーザーにフォルダパスを入力してもらう
  13. フォルダ内のファイル情報を集める
    1. Path.iterdir() で中身を列挙する
  14. ファイル情報を見やすく表示する
    1. サイズと更新日時を整形して表示する
  15. statistics と math で「ファイルサイズの統計」を出す
    1. ファイルサイズの平均・最大・最小・標準偏差
  16. random で「今日のピックアップファイル」を選ぶ
    1. ランダムに1つファイルを選ぶ
  17. 全体をまとめる:ファイル情報取得ツールのテンプレート
  18. Day 16(制作編)のまとめ

Day 16:標準ライブラリで「できることの幅」を一気に広げる

Day 16では、Pythonに最初から付いてくる「標準ライブラリ」のうち、 特に実践でよく使う ospathlibdatetimerandommathstatistics を重点的に学んでいきます。 それぞれ「何が得意な道具なのか」をイメージしながら、初心者の方にも分かりやすい例とコードで説明していきます。

os:OS(フォルダや環境)と会話するための道具

os は、「Operating System(OS)」とやり取りするための標準ライブラリです。 フォルダの中身を一覧したり、ディレクトリを作ったり、環境変数を読んだりできます。

カレントディレクトリとファイル一覧を確認する

import os

# 現在の作業ディレクトリ(カレントディレクトリ)を表示します
current_dir = os.getcwd()
print("現在のディレクトリ:", current_dir)

# カレントディレクトリにあるファイルやフォルダの一覧を表示します
entries = os.listdir(current_dir)
print("中身の一覧:")
for name in entries:
    print(" -", name)
Python
  • os.getcwd() は「今どのフォルダで作業しているか」を返します。
  • os.listdir(path) は、そのフォルダにあるファイル・フォルダ名の一覧を返します。

ディレクトリを作る

import os

# 新しいフォルダ名
new_dir = "logs"

# フォルダが存在しない場合だけ作成します
if not os.path.exists(new_dir):
    os.mkdir(new_dir)
    print("フォルダを作成しました:", new_dir)
else:
    print("フォルダはすでに存在しています:", new_dir)
Python
  • os.path.exists(path) で「そのパスが存在するか」を確認できます。
  • os.mkdir(path) で「1つのフォルダ」を作成できます。

pathlib:パス(ファイル・フォルダ)を安全に扱うための道具

pathlib は、「ファイルパスをオブジェクトとして扱う」ための標準ライブラリです。 文字列でパスをつなぐよりも、安全で読みやすいコードを書けます。

Pathオブジェクトの基本

from pathlib import Path

# カレントディレクトリを表すPathオブジェクト
current = Path.cwd()
print("現在のディレクトリ:", current)

# サブフォルダやファイルを安全に結合します
logs_dir = current / "logs"          # フォルダ
log_file = logs_dir / "app.log"     # ファイル

print("ログフォルダ:", logs_dir)
print("ログファイル:", log_file)
Python
  • Path.cwd() は「現在のディレクトリ」を表す Path オブジェクトを返します。
  • / 演算子でパスを結合できるのが特徴です(OSごとの区切り文字を意識しなくてよいです)。

ファイルの存在確認と作成

from pathlib import Path

log_file = Path("app.log")

if log_file.exists():
    print("ログファイルはすでに存在しています。")
else:
    # 空のファイルを作成します
    log_file.touch()
    print("ログファイルを作成しました。")
Python
  • Path.exists() で「そのパスが存在するか」を確認できます。
  • Path.touch() で「空のファイル」を作成できます。

datetime:日付と時刻を扱うための道具

datetime は、「日付・時刻・時間差」を扱うための標準ライブラリです。 締め切り管理、ログのタイムスタンプ、スケジュール計算などに向いています。

現在時刻を取得して表示する

from datetime import datetime

# 現在の日時を取得します
now = datetime.now()
print("現在の日時:", now)

# フォーマットを指定して表示します
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print("フォーマット済み:", formatted)
Python
  • datetime.now() は「現在の日時」を表す datetime オブジェクトを返します。
  • strftime() で「表示形式」を指定できます。 例:%Y 年、%m 月、%d 日、%H 時、%M 分、%S 秒。

日付の差を計算する

from datetime import datetime

deadline = datetime(2026, 12, 31, 23, 59, 59)  # 締め切り日時を指定
now = datetime.now()

delta = deadline - now  # 時間差(timedeltaオブジェクト)

print("締め切りまでの残り時間:", delta)
print("残り日数:", delta.days)
Python
  • datetime(年, 月, 日, 時, 分, 秒) で任意の日時を作れます。
  • 2つの datetime を引き算すると timedelta(時間差)になります。
  • delta.days で「残り日数」を取得できます。

random:ランダムな値を扱うための道具

random は、「乱数(ランダムな値)」を扱う標準ライブラリです。 ゲーム、シミュレーション、サンプル抽出などに向いています。

ランダムな整数・小数を生成する

import random

# 1〜6のランダムな整数(サイコロ)
dice = random.randint(1, 6)
print("サイコロの目:", dice)

# 0.0〜1.0のランダムな小数
r = random.random()
print("0〜1のランダムな小数:", r)
Python
  • random.randint(a, b) は「a〜bの整数」をランダムに返します。
  • random.random() は「0.0〜1.0の小数」をランダムに返します。

リストからランダムに選ぶ・シャッフルする

import random

items = ["りんご", "バナナ", "オレンジ", "ぶどう"]

# ランダムに1つ選ぶ
choice = random.choice(items)
print("ランダムに選ばれたフルーツ:", choice)

# リストをシャッフルする
random.shuffle(items)
print("シャッフル後のリスト:", items)
Python
  • random.choice(seq) は「シーケンスからランダムに1つ選ぶ」関数です。
  • random.shuffle(list) は「リストの順番をランダムに並べ替える」関数です。

math:数学的な計算をするための道具

math は、「数学的な関数や定数」を提供する標準ライブラリです。 平方根、三角関数、対数、切り上げ・切り捨てなどが含まれます。

基本的な関数と定数

import math

x = 16
print("平方根:", math.sqrt(x))  # √16 → 4.0

print("円周率:", math.pi)       # 3.14159...
print("自然対数の底:", math.e)  # 2.71828...
Python
  • math.sqrt(x) は「平方根」を計算します。
  • math.pi は「円周率」、math.e は「自然対数の底」です。

切り上げ・切り捨て・四捨五入

import math

value = 3.7

print("切り捨て:", math.floor(value))  # 3
print("切り上げ:", math.ceil(value))   # 4
print("四捨五入(round):", round(value))  # 4
Python
  • math.floor(x) は「小数点以下を切り捨て」ます。
  • math.ceil(x) は「小数点以下を切り上げ」ます。
  • round(x) は「四捨五入」します(組み込み関数ですが、よく一緒に使われます)。

statistics:簡単な統計量を計算するための道具

statistics は、「平均・中央値・分散・標準偏差」などの基本的な統計量を計算する標準ライブラリです。 データ分析の入り口として、とても扱いやすいです。

平均・中央値・分散・標準偏差

import statistics

data = [10, 20, 30, 40, 50]

mean = statistics.mean(data)      # 平均
median = statistics.median(data)  # 中央値
variance = statistics.pvariance(data)  # 母分散
stdev = statistics.pstdev(data)        # 母標準偏差

print("データ:", data)
print("平均:", mean)
print("中央値:", median)
print("母分散:", variance)
print("母標準偏差:", stdev)
Python
  • statistics.mean() は「平均」を計算します。
  • statistics.median() は「中央値」を計算します。
  • statistics.pvariance() は「母分散」、statistics.pstdev() は「母標準偏差」です。 サンプル分散・標準偏差を使いたい場合は variance()stdev() を使います。

Day 16のミニテンプレート:標準ライブラリお試しスクリプト

最後に、Day 16で扱った標準ライブラリを一度に試せるミニスクリプトを示します。

# day16_standard_lib_demo.py

import os
from pathlib import Path
from datetime import datetime
import random
import math
import statistics


def demo_os_pathlib():
    print("=== os / pathlib デモ ===")
    current = Path.cwd()
    print("現在のディレクトリ:", current)

    logs_dir = current / "logs"
    if not logs_dir.exists():
        logs_dir.mkdir()
        print("logs フォルダを作成しました:", logs_dir)
    else:
        print("logs フォルダはすでに存在しています:", logs_dir)

    print("logs フォルダの中身:")
    for p in logs_dir.iterdir():
        print(" -", p.name)


def demo_datetime():
    print("\n=== datetime デモ ===")
    now = datetime.now()
    print("現在の日時:", now)
    print("フォーマット済み:", now.strftime("%Y-%m-%d %H:%M:%S"))

    deadline = datetime(2026, 12, 31, 23, 59, 59)
    delta = deadline - now
    print("締め切りまでの残り日数:", delta.days)


def demo_random_math_statistics():
    print("\n=== random / math / statistics デモ ===")

    # random
    dice = random.randint(1, 6)
    print("サイコロの目:", dice)

    # math
    x = 16
    print("平方根 sqrt(16):", math.sqrt(x))

    # statistics
    data = [random.randint(0, 100) for _ in range(10)]
    print("データ:", data)
    print("平均:", statistics.mean(data))
    print("中央値:", statistics.median(data))


def main():
    demo_os_pathlib()
    demo_datetime()
    demo_random_math_statistics()


if __name__ == "__main__":
    main()
Python

このスクリプトを実行すると、Day 16で学んだ標準ライブラリの「雰囲気」を一度に味わうことができます。

Day 16のまとめ

Day 16では、標準ライブラリを通して、

  • ospathlib で「ファイルやフォルダ、パス」を安全に扱う感覚
  • datetime で「日付・時刻・時間差」を扱う感覚
  • random で「ランダムな値やシャッフル」を扱う感覚
  • math で「数学的な計算」を行う感覚
  • statistics で「基本的な統計量」を計算する感覚

をステップバイステップで体験していただきました。

ここまで来ると、「Pythonはただの計算機ではなく、OS・時間・データと対話できる道具箱だ」というイメージが少し育っているはずです。 このイメージは、今後の実践Python編でより大きなアプリやスクリプトを作っていくうえで、強力な土台になっていきます。


Day 16:標準ライブラリで「ファイル情報取得ツール」を作る

Day 16の制作編では、ospathlibdatetimerandommathstatistics を組み合わせて、 「指定したフォルダ内のファイル情報を集めて、ちょっとした統計も出してくれるCLIツール」を作っていきます。 プログラミング初心者の方にも分かりやすいように、ステップバイステップで解説していきます。

作るものの全体像をイメージする

ファイル情報取得ツールの機能

今回作るツールは、次のような機能を持つことを目標にします。

  • 指定したフォルダ内のファイル一覧を取得する
  • 各ファイルのサイズ・更新日時などの情報を表示する
  • ファイルサイズの統計(平均・最大・最小など)を計算する
  • ランダムに1つファイルを選んで「今日のピックアップ」として表示する

この中で、

  • フォルダ・ファイル操作 → ospathlib
  • 日付・時刻 → datetime
  • ランダム選択 → random
  • 数値計算 → math
  • 統計量 → statistics

を自然に使っていきます。

pathlib と os で「フォルダとファイル」を扱う

ユーザーにフォルダパスを入力してもらう

まずは、ユーザーに「調べたいフォルダ」を入力してもらい、そのフォルダの中身を扱えるようにします。

from pathlib import Path

def get_target_directory():
    """ユーザーにフォルダパスを入力してもらい、Pathオブジェクトとして返す関数です。"""
    text = input("調べたいフォルダのパスを入力してください(空ならカレントディレクトリ): ").strip()

    if text == "":
        # 空入力の場合は、現在のディレクトリを使います
        target = Path.cwd()
    else:
        target = Path(text)

    if not target.exists():
        print("指定されたパスは存在しません。")
        return None

    if not target.is_dir():
        print("指定されたパスはフォルダではありません。")
        return None

    return target
Python

ここでのポイントは、

  • Path(text) で文字列からパスオブジェクトを作る
  • Path.cwd() で「現在のディレクトリ」を取得する
  • exists()is_dir() で「存在するか」「フォルダかどうか」をチェックする

という点です。

フォルダ内のファイル情報を集める

Path.iterdir() で中身を列挙する

指定したフォルダ内のファイルを列挙し、情報を集める関数を作ります。

import os
from pathlib import Path
from datetime import datetime

def collect_file_info(directory: Path):
    """フォルダ内のファイル情報を集めてリストで返す関数です。"""
    files = []

    for entry in directory.iterdir():
        # フォルダは除外して、ファイルだけを対象にします
        if entry.is_file():
            # ファイルサイズ(バイト数)を取得します
            size = entry.stat().st_size

            # 更新日時(UNIXタイム)を取得して、datetimeに変換します
            mtime = entry.stat().st_mtime
            updated_at = datetime.fromtimestamp(mtime)

            files.append({
                "name": entry.name,
                "path": entry,
                "size": size,
                "updated_at": updated_at,
            })

    return files
Python

ここでのポイントは、

  • directory.iterdir() で「フォルダ内のエントリ(ファイル・フォルダ)」を列挙できる
  • entry.is_file() で「ファイルだけ」に絞り込む
  • entry.stat() で「ファイルのメタ情報(サイズ・更新日時など)」を取得できる
  • datetime.fromtimestamp(mtime) で「UNIXタイム → datetime」に変換する

という点です。

ファイル情報を見やすく表示する

サイズと更新日時を整形して表示する

集めたファイル情報を、ユーザーにとって見やすい形で表示する関数を作ります。

from datetime import datetime

def format_size(size_bytes: int) -> str:
    """バイト数をKB/MBなどにざっくり変換して文字列にする関数です。"""
    # ここではシンプルにKB単位にします
    kb = size_bytes / 1024
    return f"{kb:.2f} KB"

def format_datetime(dt: datetime) -> str:
    """datetimeを読みやすい文字列に変換する関数です。"""
    return dt.strftime("%Y-%m-%d %H:%M:%S")

def show_file_list(files):
    """ファイル情報一覧を表示する関数です。"""
    if not files:
        print("このフォルダにはファイルがありません。")
        return

    print("\n▼ ファイル一覧")
    print("--------------------")
    for info in files:
        name = info["name"]
        size_text = format_size(info["size"])
        updated_text = format_datetime(info["updated_at"])
        print(f"名前: {name}")
        print(f"サイズ: {size_text}")
        print(f"更新日時: {updated_text}")
        print("--------------------")
Python

ここでは、

  • サイズをそのままバイト数で表示すると分かりにくいので、KBに変換しています。
  • 日時は strftime() で「年-月-日 時:分:秒」の形に整形しています。

statistics と math で「ファイルサイズの統計」を出す

ファイルサイズの平均・最大・最小・標準偏差

ファイルサイズの統計量を計算する関数を作ります。

import statistics
import math

def show_file_statistics(files):
    """ファイルサイズの統計情報を表示する関数です。"""
    if not files:
        print("統計を計算するファイルがありません。")
        return

    sizes = [info["size"] for info in files]

    mean = statistics.mean(sizes)
    minimum = min(sizes)
    maximum = max(sizes)

    # 標準偏差(母標準偏差)を計算します
    stdev = statistics.pstdev(sizes)

    print("\n▼ ファイルサイズ統計")
    print("--------------------")
    print(f"ファイル数: {len(sizes)}")
    print(f"平均サイズ: {format_size(mean)}")
    print(f"最小サイズ: {format_size(minimum)}")
    print(f"最大サイズ: {format_size(maximum)}")
    print(f"標準偏差: {format_size(stdev)}")
    print("--------------------")
Python

ここでのポイントは、

  • statistics.mean() で平均
  • min()max() で最小・最大
  • statistics.pstdev() で母標準偏差

を計算している点です。

標準偏差は、「サイズのばらつき」を表す指標であり、 値が大きいほど「サイズがバラバラ」、小さいほど「サイズが揃っている」といったイメージになります。

random で「今日のピックアップファイル」を選ぶ

ランダムに1つファイルを選ぶ

ファイル一覧からランダムに1つ選び、「今日のピックアップ」として表示する関数を作ります。

import random

def show_random_file(files):
    """ランダムに1つファイルを選んで表示する関数です。"""
    if not files:
        print("ランダムに選ぶファイルがありません。")
        return

    chosen = random.choice(files)

    print("\n▼ 今日のピックアップファイル")
    print("--------------------")
    print(f"名前: {chosen['name']}")
    print(f"サイズ: {format_size(chosen['size'])}")
    print(f"更新日時: {format_datetime(chosen['updated_at'])}")
    print("--------------------")
Python

ここでは、

  • random.choice(seq) で「シーケンスからランダムに1つ選ぶ」
  • すでに作った format_size()format_datetime() を再利用

という形で、標準ライブラリを組み合わせています。

全体をまとめる:ファイル情報取得ツールのテンプレート

ここまでの関数を組み合わせて、「ファイル情報取得ツール」として動く全体コードをまとめます。

# file_info_tool.py
# Day 16:標準ライブラリを使ったファイル情報取得ツール

import os
import random
import statistics
import math
from pathlib import Path
from datetime import datetime


def get_target_directory():
    """ユーザーにフォルダパスを入力してもらい、Pathオブジェクトとして返します。"""
    text = input("調べたいフォルダのパスを入力してください(空ならカレントディレクトリ): ").strip()

    if text == "":
        target = Path.cwd()
    else:
        target = Path(text)

    if not target.exists():
        print("指定されたパスは存在しません。")
        return None

    if not target.is_dir():
        print("指定されたパスはフォルダではありません。")
        return None

    return target


def collect_file_info(directory: Path):
    """フォルダ内のファイル情報を集めてリストで返します。"""
    files = []

    for entry in directory.iterdir():
        if entry.is_file():
            stat = entry.stat()
            size = stat.st_size
            mtime = stat.st_mtime
            updated_at = datetime.fromtimestamp(mtime)

            files.append({
                "name": entry.name,
                "path": entry,
                "size": size,
                "updated_at": updated_at,
            })

    return files


def format_size(size_bytes: float) -> str:
    """バイト数をKB単位に変換して文字列にします。"""
    kb = size_bytes / 1024
    return f"{kb:.2f} KB"


def format_datetime(dt: datetime) -> str:
    """datetimeを読みやすい文字列に変換します。"""
    return dt.strftime("%Y-%m-%d %H:%M:%S")


def show_file_list(files):
    """ファイル情報一覧を表示します。"""
    if not files:
        print("このフォルダにはファイルがありません。")
        return

    print("\n▼ ファイル一覧")
    print("--------------------")
    for info in files:
        print(f"名前: {info['name']}")
        print(f"サイズ: {format_size(info['size'])}")
        print(f"更新日時: {format_datetime(info['updated_at'])}")
        print("--------------------")


def show_file_statistics(files):
    """ファイルサイズの統計情報を表示します。"""
    if not files:
        print("統計を計算するファイルがありません。")
        return

    sizes = [info["size"] for info in files]

    mean = statistics.mean(sizes)
    minimum = min(sizes)
    maximum = max(sizes)
    stdev = statistics.pstdev(sizes)

    print("\n▼ ファイルサイズ統計")
    print("--------------------")
    print(f"ファイル数: {len(sizes)}")
    print(f"平均サイズ: {format_size(mean)}")
    print(f"最小サイズ: {format_size(minimum)}")
    print(f"最大サイズ: {format_size(maximum)}")
    print(f"標準偏差: {format_size(stdev)}")
    print("--------------------")


def show_random_file(files):
    """ランダムに1つファイルを選んで表示します。"""
    if not files:
        print("ランダムに選ぶファイルがありません。")
        return

    chosen = random.choice(files)

    print("\n▼ 今日のピックアップファイル")
    print("--------------------")
    print(f"名前: {chosen['name']}")
    print(f"サイズ: {format_size(chosen['size'])}")
    print(f"更新日時: {format_datetime(chosen['updated_at'])}")
    print("--------------------")


def main():
    """ファイル情報取得ツールのメイン関数です。"""
    directory = get_target_directory()
    if directory is None:
        return

    files = collect_file_info(directory)

    while True:
        print("\n=== ファイル情報取得ツール ===")
        print(f"対象フォルダ: {directory}")
        print("1: ファイル一覧を表示する")
        print("2: ファイルサイズの統計を表示する")
        print("3: 今日のピックアップファイルを表示する")
        print("4: 終了する")

        choice = input("番号を入力してください: ").strip()

        if choice == "1":
            show_file_list(files)
        elif choice == "2":
            show_file_statistics(files)
        elif choice == "3":
            show_random_file(files)
        elif choice == "4":
            print("ファイル情報取得ツールを終了します。")
            break
        else:
            print("1〜4の番号を入力してください。")


if __name__ == "__main__":
    main()
Python

Day 16(制作編)のまとめ

Day 16の制作編では、「ファイル情報取得ツール」を通して、

  • pathlibos でフォルダ・ファイル・パスを安全に扱うこと
  • datetime でファイルの更新日時を人間にとって読みやすい形にすること
  • statisticsmath でファイルサイズの統計量を計算すること
  • random で「今日のピックアップファイル」を選ぶ遊び心を加えること

を一つのプログラムの中で体験していただきました。

ここまで来ると、「標準ライブラリを組み合わせることで、実用的なツールがすぐに作れる」という感覚が少し育っているはずです。 この感覚は、今後の実践Python編でより高度なスクリプトや自動化ツールを作っていくうえで、強力な土台になっていきます。

タイトルとURLをコピーしました