PYTHON MEBY

Pythonでファイル・ディレクトリの操作(os, shutil, pathlib)

この記事では、Pythonの`os`、`shutil`、`pathlib`モジュールを使ったファイルとディレクトリの操作方法を説明します。ファイルやディレクトリの作成、削除、移動、名前変更、そしてそれらの属性の取得方法を学びます。

目次

osモジュールを使ったファイルとディレクトリの操作

`os`モジュールは、オペレーティングシステムに依存した様々な機能を提供します。ファイルやディレクトリの操作もその一つです。

import os

# カレントディレクトリの取得
current_dir = os.getcwd()
print(f"カレントディレクトリ: {current_dir}")

# ディレクトリの作成
os.makedirs("new_directory", exist_ok=True)

# ファイルの作成
with open("new_file.txt", "w") as f:
    f.write("Hello, world!")

# ファイルの削除
os.remove("new_file.txt")

# ディレクトリの削除
os.rmdir("new_directory")

# ファイルの存在確認
if os.path.exists("my_file.txt"):
    print("ファイルが存在します")
else:
    print("ファイルが存在しません")

# ファイルのサイズ
file_size = os.path.getsize("my_file.txt")
print(f"ファイルサイズ: {file_size} bytes")

`os.makedirs()`は、ディレクトリが存在しない場合に作成します。`exist_ok=True`を指定すると、ディレクトリが既に存在する場合でもエラーになりません。 `os.remove()`はファイルを削除します。`os.rmdir()`は空のディレクトリを削除します。`os.path.exists()`はファイルやディレクトリが存在するかどうかを確認します。`os.path.getsize()`はファイルのサイズを取得します。

shutilモジュールを使ったファイルとディレクトリの操作

`shutil`モジュールは、より高レベルなファイル操作を提供します。ファイルのコピー、移動、圧縮などが容易に行えます。

import shutil
import os

# ファイルのコピー
shutil.copy("source_file.txt", "destination_file.txt")

# ファイルの移動
shutil.move("source_file.txt", "destination_directory")

# ディレクトリの再帰的なコピー
shutil.copytree("source_directory", "destination_directory")

# ディレクトリの削除 (中身も削除)
shutil.rmtree("directory_to_remove")

# 圧縮
shutil.make_archive("archive_name", 'zip', "directory_to_archive") #zip形式で圧縮

`shutil.copy()`はファイルをコピーします。`shutil.move()`はファイルを移動します。`shutil.copytree()`はディレクトリを再帰的にコピーします。`shutil.rmtree()`はディレクトリとその中身を削除します。`shutil.make_archive()`はファイルを圧縮します。

pathlibモジュールを使ったファイルとディレクトリの操作

`pathlib`モジュールは、オブジェクト指向的なアプローチでファイルパスを扱うことができます。より直感的で、エラーになりにくいコードを作成できます。

from pathlib import Path

# パスオブジェクトの作成
path = Path("my_file.txt")

# ファイルの作成
path.touch()

# ファイルへの書き込み
with open(path, "w") as f:
    f.write("Hello, pathlib!")

# ファイルの削除
path.unlink()

# ディレクトリの作成
dir_path = Path("my_directory")
dir_path.mkdir(exist_ok=True)

# ディレクトリの削除
dir_path.rmdir()

# ファイルの存在確認
if path.exists():
    print("ファイルが存在します")
else:
    print("ファイルが存在しません")

`pathlib`を使うと、ファイルパスをオブジェクトとして扱うことができるため、より読みやすく、保守しやすいコードになります。

注意点

ファイル・ディレクトリ操作を行う際の注意点です。

  • ファイルパスは絶対パスまたは相対パスで指定します。
  • 存在しないファイルやディレクトリを操作しようとすると例外が発生します。
  • 異なるOS間でコードを動かす場合、OSに依存しないパス表現を使う必要があります。`os.path.join()` を使用しましょう。
  • 権限がないファイルやディレクトリを操作しようとすると例外が発生します。
  • ファイルやディレクトリが既に存在する場合の処理を考慮する必要があります。`exist_ok=True`オプションなどを活用しましょう。

エラーハンドリング

ファイル・ディレクトリ操作では、様々な例外が発生する可能性があります。適切な例外処理を行うことで、プログラムの堅牢性を高めることができます。

import os

try:
    os.remove("nonexistent_file.txt")
except FileNotFoundError:
    print("ファイルが見つかりません")
except PermissionError:
    print("アクセス権がありません")
except OSError as e:
    print(f"エラーが発生しました: {e}")

`try...except`ブロックを使って例外をキャッチし、適切な処理を行うことで、プログラムがクラッシュすることを防ぎます。

関連記事