os.listdir() / os.makedirs() / os.remove()
| 対応: | Python 2(2000) |
|---|
ディレクトリの一覧取得・作成・ファイル削除・名前変更などを行う『os』モジュールの関数です。スクリプトからファイルシステムを操作するときに使います。
構文
import os # ディレクトリ内のファイル・ディレクトリ名をリストで返す os.listdir(パス) # ディレクトリを再帰的に作成する os.makedirs(パス, exist_ok=True) # ディレクトリを1階層作成する(親が存在しない場合はエラー) os.mkdir(パス) # ファイルを削除する os.remove(パス) # ファイルまたはディレクトリの名前を変更・移動する os.rename(旧パス, 新パス) # 現在の作業ディレクトリを取得する os.getcwd() # 作業ディレクトリを変更する os.chdir(パス)
関数一覧
| 関数 | 概要 |
|---|---|
| os.listdir(パス) | 指定したディレクトリ内のエントリ名(ファイル・サブディレクトリ)をリストで返します。順序は不定で、『.』と『..』は含まれません。 |
| os.makedirs(パス, exist_ok=False) | 指定したパスのディレクトリを再帰的に作成します。『exist_ok=True』を指定すると既存の場合でもエラーになりません。 |
| os.mkdir(パス) | ディレクトリを1階層作成します。親ディレクトリが存在しない場合は『FileNotFoundError』が発生します。 |
| os.remove(パス) | ファイルを削除します。ディレクトリには使えません。存在しない場合は『FileNotFoundError』が発生します。 |
| os.rename(旧パス, 新パス) | ファイルまたはディレクトリの名前を変更、または移動します。 |
| os.getcwd() | 現在の作業ディレクトリの絶対パスを文字列で返します。 |
| os.chdir(パス) | 現在の作業ディレクトリを変更します。 |
| os.rmdir(パス) | 空のディレクトリを削除します。空でない場合は『OSError』が発生します。 |
サンプルコード
os_listdir_basic.py
import os
entries = os.listdir('.')
print(entries)
files = [f for f in os.listdir('.') if os.path.isfile(f)]
print(files)
current = os.getcwd()
print(f'現在のディレクトリ: {current}')
実行すると次のように出力されます。
python3 os_listdir_basic.py ['main.py', 'utils.py', 'config.json', 'data'] ['main.py', 'utils.py', 'config.json'] 現在のディレクトリ: /home/user/projects
os_listdir_makedirs.py
import os
os.makedirs('output/reports/2025', exist_ok=True)
print('ディレクトリを作成しました。')
try:
os.mkdir('new_folder')
print('フォルダを作成しました。')
except FileExistsError:
print('すでに存在します。')
with open('temp.txt', 'w') as f:
f.write('一時ファイル')
if os.path.exists('temp.txt'):
os.remove('temp.txt')
print('ファイルを削除しました。')
実行すると次のように出力されます。
python3 os_listdir_makedirs.py ディレクトリを作成しました。 フォルダを作成しました。 ファイルを削除しました。
os_listdir_walk.py
import os
with open('old_name.txt', 'w') as f:
f.write('内容')
os.rename('old_name.txt', 'new_name.txt')
print('ファイル名を変更しました。')
for dirpath, dirnames, filenames in os.walk('.'):
for filename in filenames:
full_path = os.path.join(dirpath, filename)
print(full_path)
実行すると次のように出力されます。
python3 os_listdir_walk.py ファイル名を変更しました。 ./main.py ./utils.py ./config.json ./data/input.csv
よくあるミス
よくあるミス1: os.makedirs()でexist_ok=Trueを指定しない
exist_ok=Trueを指定しないと、ディレクトリがすでに存在する場合にFileExistsErrorが発生します。スクリプトを何度でも実行できるようにするにはexist_ok=Trueを指定する方法があります。
import os
os.makedirs('output/reports')
次のように記述します。
import os
os.makedirs('output/reports', exist_ok=True)
よくあるミス2: os.listdir()でサブディレクトリを再帰取得しようとする
os.listdir()は指定したディレクトリの直下のエントリ名のみを返します。サブディレクトリの中身は含まれません。再帰的に走査したい場合はos.walk()をファイル操作に利用できます。
import os
all_files = os.listdir('.')
print(all_files)
次のように記述します。
import os
all_files = []
for dirpath, dirnames, filenames in os.walk('.'):
for filename in filenames:
all_files.append(os.path.join(dirpath, filename))
print(all_files)
概要
『os.listdir()』は指定したディレクトリ直下のエントリ名だけを返します。サブディレクトリの中身は含まれません。ディレクトリを再帰的に走査したい場合は『os.walk()』をファイル操作に利用できます。
『os.makedirs()』では『exist_ok=True』を指定することで、ディレクトリが既に存在してもエラーが発生しません。スクリプトの冪等性(何度実行しても同じ結果になる性質)を保つために使えます。
『os.remove()』で削除したファイルはゴミ箱に入らず完全に削除されます。削除前に確認を入れるか、重要なファイルはバックアップしてから操作できます。
パスの操作は『os.path.join() / os.path.exists() / os.path.basename()』を参照してください。モダンなパス操作は『pathlib.Path()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。