note.nkmk.me

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

Posted: 2017-11-22 / Tags: Python, ファイル処理

Pythonで新しいディレクトリ(フォルダ)を保存先としてファイルを作成・保存する方法について、以下の内容を説明する。

  • 存在しないディレクトリを指定してopen()するとエラー(FileNotFoundError
  • os.makedirs()でディレクトリを作成
  • コード例

以下、テキストファイルの例を示す。

画像を保存する場合、存在しないディレクトリを含むパスを指定できるかどうか(存在しない場合は自動的に作成してくれるか)はライブラリによる。エラー(FileNotFoundError)が発生する場合は以下の例と同様に、保存する関数を実行する前にos.makedirs()でディレクトリを新規作成すればよい。

スポンサーリンク

存在しないディレクトリを指定してopen()するとエラー(FileNotFoundError)

組み込み関数open()でファイルを新規作成する場合、新しいディレクトリ(存在しないディレクトリ)を含んだパスを保存先として第一引数に指定するとエラー(FileNotFoundError)が発生する。

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

既存のディレクトリにファイルを新規作成する場合や、既存ファイルに上書き・追記する場合など、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)

詳細は以下の記事を参照。

コード例

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

new_dir_pathnew_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)
source: filelib.py

以下のように使う。

save_file_at_new_dir('new_dir/sub_dir', 'new_file.txt', 'new text')

new textという内容のファイルnew_dir/sub_dir/new_file.txtが作成される。

ここで、os.path.join()でディレクトリとファイル名を連結している。

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

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事