Pythonで新しいディレクトリにファイルを作成・保存

存在しないディレクトリを指定してopenするとエラー Pythonで、まだ存在しない新しいディレクトリ(フォルダ)にファイルを作成・保存しようとした場合、普通にopenで新しいディレクトリ(存在しないディレクトリ)を含んだパスを指定するとエラー(FileNotFoundError)が発生します。

open('not_exist_dir/new_file.txt', 'w')
# FileNotFoundError

カレントディレクトリなど既存のディレクトリにファイルを新規作成する場合や、既存ファイルに上書き・追記する場合などは、

os.makedirsでディレクトリを作成 openの前にディレクトリを新規作成する必要があります。 Python 3.2以降であれば、os.makedirsを引数exist_ok=Trueとして使うのが便利です。いちいち末端ディレクトリの存在を確認する必要がなく、再帰的に一気にディレクトリを作成できます。

import os

os.makedirs(new_dir_path, exist_ok=True)

Pythonのバージョンが古くos.makedirsに引数exist_okがない場合は、先にos.path.existsでディレクトリの有無を調べる。

if not os.path.exists(new_dir_path):
    os.makedirs(new_dir_path)

詳細は

Pythonで深い階層のディレクトリを再帰的に作成するmakedirs

コード例 新しいディレクトリにファイルを作成・保存する関数のコード例を示す。

new_dir_pathのnew_filenameという名前のファイルに、new_file_contentを書き込む。
def save_file_at_new_dir(new_dir_path, new_filename, new_file_content, mode='w'):
    os.makedirs(new_dir_path, exist_ok=True)
    with open(os.path.join(new_dir_path, new_filename), mode) as f:
        f.write(new_file_content)

openのモードを引数で指定するようにしています。テキストファイルならデフォルトの'w'でいいが、バイナリファイルを作成したい場合はmode='wb'とします。

Last Updated: 6/26/2019, 10:34:03 PM