- Day 16:標準ライブラリで「できることの幅」を一気に広げる
- os:OS(フォルダや環境)と会話するための道具
- pathlib:パス(ファイル・フォルダ)を安全に扱うための道具
- datetime:日付と時刻を扱うための道具
- random:ランダムな値を扱うための道具
- math:数学的な計算をするための道具
- statistics:簡単な統計量を計算するための道具
- Day 16のミニテンプレート:標準ライブラリお試しスクリプト
- Day 16のまとめ
- Day 16:標準ライブラリで「ファイル情報取得ツール」を作る
- 作るものの全体像をイメージする
- pathlib と os で「フォルダとファイル」を扱う
- フォルダ内のファイル情報を集める
- ファイル情報を見やすく表示する
- statistics と math で「ファイルサイズの統計」を出す
- random で「今日のピックアップファイル」を選ぶ
- 全体をまとめる:ファイル情報取得ツールのテンプレート
- Day 16(制作編)のまとめ
Day 16:標準ライブラリで「できることの幅」を一気に広げる
Day 16では、Pythonに最初から付いてくる「標準ライブラリ」のうち、 特に実践でよく使う os・pathlib・datetime・random・math・statistics を重点的に学んでいきます。 それぞれ「何が得意な道具なのか」をイメージしながら、初心者の方にも分かりやすい例とコードで説明していきます。
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)
Pythonos.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)
Pythonos.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)
PythonPath.cwd()は「現在のディレクトリ」を表すPathオブジェクトを返します。/演算子でパスを結合できるのが特徴です(OSごとの区切り文字を意識しなくてよいです)。
ファイルの存在確認と作成
from pathlib import Path
log_file = Path("app.log")
if log_file.exists():
print("ログファイルはすでに存在しています。")
else:
# 空のファイルを作成します
log_file.touch()
print("ログファイルを作成しました。")
PythonPath.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)
Pythondatetime.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)
Pythondatetime(年, 月, 日, 時, 分, 秒)で任意の日時を作れます。- 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)
Pythonrandom.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)
Pythonrandom.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...
Pythonmath.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
Pythonmath.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)
Pythonstatistics.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では、標準ライブラリを通して、
os・pathlibで「ファイルやフォルダ、パス」を安全に扱う感覚datetimeで「日付・時刻・時間差」を扱う感覚randomで「ランダムな値やシャッフル」を扱う感覚mathで「数学的な計算」を行う感覚statisticsで「基本的な統計量」を計算する感覚
をステップバイステップで体験していただきました。
ここまで来ると、「Pythonはただの計算機ではなく、OS・時間・データと対話できる道具箱だ」というイメージが少し育っているはずです。 このイメージは、今後の実践Python編でより大きなアプリやスクリプトを作っていくうえで、強力な土台になっていきます。
Day 16:標準ライブラリで「ファイル情報取得ツール」を作る
Day 16の制作編では、os・pathlib・datetime・random・math・statistics を組み合わせて、 「指定したフォルダ内のファイル情報を集めて、ちょっとした統計も出してくれるCLIツール」を作っていきます。 プログラミング初心者の方にも分かりやすいように、ステップバイステップで解説していきます。
作るものの全体像をイメージする
ファイル情報取得ツールの機能
今回作るツールは、次のような機能を持つことを目標にします。
- 指定したフォルダ内のファイル一覧を取得する
- 各ファイルのサイズ・更新日時などの情報を表示する
- ファイルサイズの統計(平均・最大・最小など)を計算する
- ランダムに1つファイルを選んで「今日のピックアップ」として表示する
この中で、
- フォルダ・ファイル操作 →
os・pathlib - 日付・時刻 →
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()
PythonDay 16(制作編)のまとめ
Day 16の制作編では、「ファイル情報取得ツール」を通して、
pathlibとosでフォルダ・ファイル・パスを安全に扱うことdatetimeでファイルの更新日時を人間にとって読みやすい形にすることstatisticsとmathでファイルサイズの統計量を計算することrandomで「今日のピックアップファイル」を選ぶ遊び心を加えること
を一つのプログラムの中で体験していただきました。
ここまで来ると、「標準ライブラリを組み合わせることで、実用的なツールがすぐに作れる」という感覚が少し育っているはずです。 この感覚は、今後の実践Python編でより高度なスクリプトや自動化ツールを作っていくうえで、強力な土台になっていきます。
