1. ホーム
  2. python

[解決済み] ファイル出力で自動的にディレクトリを作成する【重複】。

2022-03-23 04:53:14

質問

重複の可能性があります。
mkdir -p 機能を Python で使用する

ファイルを作りたいとします。

filename = "/foo/bar/baz.txt"

with open(filename, "w") as f:
    f.write("FOOBAR")

これは IOError というのは /foo/bar は存在しない。

これらのディレクトリを自動的に生成するための最もpythonicな方法は何でしょうか?を明示的に呼び出す必要があるのでしょうか? os.path.existsos.mkdir を1つ1つ表示させる(つまり、/fooの次に/foo/bar)のですか?

どのように解決するのですか?

Python 3.2+ では、次のことができます。 エレガント は以下のようにします。


import os

filename = "/foo/bar/baz.txt"
os.makedirs(os.path.dirname(filename), exist_ok=True)
with open(filename, "w") as f:
    f.write("FOOBAR")



古い Python では、あまりエレガントでない方法があります。

os.makedirs 関数がこれを行います。以下を試してみてください。

import os
import errno

filename = "/foo/bar/baz.txt"
if not os.path.exists(os.path.dirname(filename)):
    try:
        os.makedirs(os.path.dirname(filename))
    except OSError as exc: # Guard against race condition
        if exc.errno != errno.EEXIST:
            raise

with open(filename, "w") as f:
    f.write("FOOBAR")


を追加する理由は try-except ブロックの間にディレクトリが作成された場合に対応するためです。 os.path.existsos.makedirs を呼び出すことで、レースコンディションを回避することができます。