Pythonで新しいディレクトリにファイルを作成・保存
Pythonで新しいディレクトリ(フォルダ)を保存先としてファイルを新規作成・保存する方法について、以下の内容を説明する。
- 存在しないディレクトリを
open()
で指定するとエラー(FileNotFoundError
) os.makedirs()
でディレクトリを作成- 保存先を指定してファイルを新規作成するコード例
以下、テキストファイルの例を示す。
画像を保存する場合、存在しないディレクトリを含むパスを指定できるかどうか(存在しない場合は自動的に作成してくれるか)はライブラリによる。エラー(FileNotFoundError
)が発生する場合は以下の例と同様に、保存する関数を実行する前にos.makedirs()
でディレクトリを新規作成すればよい。
存在しないディレクトリをopen()で指定するとエラー(FileNotFoundError)
組み込み関数open()
でファイルを新規作成する場合、新しいディレクトリ(存在しないディレクトリ)を含んだパスを保存先として第一引数に指定するとエラー(FileNotFoundError
)が発生する。
open('not_exist_dir/new_file.txt', 'w')
# FileNotFoundError
open()
の第一引数には、絶対パスか、カレントディレクトリからの相対パスを指定する。
既存のディレクトリにファイルを新規作成する場合や、既存ファイルに上書き・追記する場合など、open()
の基本的な使い方については以下の記事を参照。
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)
詳細は以下の記事を参照。
保存先を指定してファイルを新規作成するコード例
保存先のディレクトリを指定して新たなファイルを作成・保存する関数のコード例を示す。
第一引数dir_path
に保存先のディレクトリのパス、第二引数filename
に新規作成するファイル名、第三引数file_content
に書き込む内容を、それぞれ文字列で指定する。
指定したディレクトリが存在しない場合は新たに作成する。
import os
def save_file_at_dir(dir_path, filename, file_content, mode='w'):
os.makedirs(dir_path, exist_ok=True)
with open(os.path.join(dir_path, filename), mode) as f:
f.write(file_content)
以下のように使う。
save_file_at_dir('new_dir/sub_dir', 'new_file.txt', 'new text')
この場合、new text
という内容が書き込まれたファイルnew_file.txt
がnew_dir/sub_dir
に作成される(= new_dir/sub_dir/new_file.txt
が新規作成される)。
ここで、os.path.join()
でディレクトリとファイル名を連結している。
また、open()
のモードを引数で指定するようにしている。テキストファイルならデフォルトの'w'
でいいが、バイナリファイルを作成したい場合はmode='wb'
とする。