7.1 基本的な操作
ファイルの扱い方は覚えたから、次にディレクトリを操作してみよう。時にはファイル操作に似てるけど、違うこともあるよね。ディレクトリには独自の特徴があるんだ。ディレクトリ操作のための基本的な関数は モジュール os
と shutil
によって提供されてるよ。
ディレクトリの基本操作:
ディレクトリの作成
新しいディレクトリを作成するには os.mkdir()
関数を使うよ。
例:
import os
# 新しいディレクトリの作成
os.mkdir('new_directory')
print("ディレクトリ 'new_directory' が作成された")
複数のネストされたディレクトリの作成
複数のネストされたディレクトリを作成するには os.makedirs()
関数を使うよ。
例:
import os
# 複数のネストされたディレクトリの作成
os.makedirs('parent_directory/child_directory')
print("ネストされたディレクトリ 'parent_directory/child_directory' が作成された")
ディレクトリの削除
空のディレクトリを削除するには os.rmdir()
関数を使うよ。中身があるディレクトリを削除するには shutil.rmtree()
を使うんだ。
例:
import os
# 空のディレクトリの削除
os.rmdir('new_directory')
print("ディレクトリ 'new_directory' が削除された")
中身があるディレクトリを削除する例:
import shutil
# 中身があるディレクトリの削除
shutil.rmtree('parent_directory')
print("ディレクトリ 'parent_directory' とその中身が全部削除された")
重要!
ディレクトリを中身ごと削除しないでね。プログラムにバグが潜んでいると、ディスクのファイルが半分消えちゃうから。誰もが通る道だけど、本当にやめておこう。
ディレクトリを削除する前に、os.path.exists()
関数を使ってその存在を確認するのが推奨されるよ。それで、存在しないディレクトリや間違ったパスの削除に関するエラーを防ぐことができるんだ。
例:
import os
import shutil
# 削除前にディレクトリの存在を確認
directory_path = 'parent_directory'
if os.path.exists(directory_path):
shutil.rmtree(directory_path)
print(f"ディレクトリ '{directory_path}' とその中身が全部削除された")
else:
print(f"ディレクトリ '{directory_path}' は存在しないので、削除はできないよ")
7.2 ディレクトリのコピー
ディレクトリの移動と名前変更
ディレクトリを移動または名前を変更するには os.rename()
関数を使うんだ。
import os
# サンプル用にディレクトリを作成
os.mkdir('original_directory')
# ディレクトリの名前を変更
os.rename('original_directory', 'renamed_directory')
print("ディレクトリ 'original_directory' の名前が 'renamed_directory' に変更された")
ディレクトリのコピー
ディレクトリをコピーするには shutil.copytree()
関数を使うよ。この関数はディレクトリの中身をコピーするだけでなく、指定したパスに新しいディレクトリを作成するんだ。
import os
import shutil
# サンプル用にディレクトリを作成
os.mkdir('source_directory')
# ディレクトリのコピー
shutil.copytree('source_directory', 'destination_directory')
print("ディレクトリ 'source_directory' が 'destination_directory' にコピーされた")
7.3 現在のディレクトリ
すべての実行中のプログラムには「現在の作業ディレクトリ」という概念があるんだ。通常はプログラムが実行されたディレクトリで、プログラムがそのサービスファイルを探す場所なんだ。例えば、ディレクトリ名なしで指定されたすべてのファイルは、現在のディレクトリで探されるんだ。
現在の作業ディレクトリを取得
現在の作業ディレクトリを取得するには os.getcwd()
関数を使うよ。
import os
# 現在の作業ディレクトリを取得
current_directory = os.getcwd()
print(f"現在の作業ディレクトリ: {current_directory}")
現在の作業ディレクトリを変更
現在の作業ディレクトリを変更するには os.chdir()
関数を使うんだ。
import os
# 現在の作業ディレクトリを変更
os.chdir('new_directory')
print(f"現在の作業ディレクトリは {os.getcwd()} に変更された")
現在の作業ディレクトリの変更は、現在のディレクトリに対して相対的に指定されたファイルのパスに影響を与えるかもしれないよ。ディレクトリを変更するときは注意が必要で、プログラムが元のディレクトリにファイルを期待している場合、エラーが発生するかもしれないからね。
ディレクトリの存在を確認
ディレクトリの存在を確認するには os.path.exists()
関数を使うよ。
import os
# ディレクトリの存在を確認
directory_path = 'new_directory'
if os.path.exists(directory_path):
print(f"ディレクトリ '{directory_path}' は存在してるよ")
else:
print(f"ディレクトリ '{directory_path}' は存在しない")
ディレクトリの絶対パスを取得
絶対パスを取得するには os.path.abspath()
関数を使うんだ。
import os
# ディレクトリの絶対パスを取得
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"絶対パス: {absolute_path}")
7.4 ディレクトリの内容
ファイルとディレクトリの一覧を取得
指定されたディレクトリ内のファイルとディレクトリの一覧を取得するには os.listdir()
関数を使うよ。
import os
# 現在のディレクトリ内のファイルとディレクトリの一覧を取得
contents = os.listdir('.')
print(f"現在のディレクトリの内容: {contents}")
ファイルやディレクトリをパスのリストとしてではなく、より複雑なオブジェクトとして扱うことができるんだ。
os.scandir()
を使ったディレクトリの内容情報の取得
os.scandir()
関数は、ディレクトリ内の各エントリに DirEntry
オブジェクトを返すイテレータを返すよ。これらのオブジェクトはファイルとディレクトリに関する情報を含んでいて、特に大きなフォルダに対して os.listdir()
よりも効率的に使えるんだ。
import os
# ディレクトリの内容情報を取得
with os.scandir('.') as entries:
for entry in entries:
print(f"名前: {entry.name}, ディレクトリである: {entry.is_dir()}, ファイルである: {entry.is_file()}")
GO TO FULL VERSION