web-dev-qa-db-ja.com

open(filename、 'w')を使用しようとすると、IOErrorが発生します:[Errno 2]ディレクトリが存在しない場合、そのようなファイルまたはディレクトリはありません

Pythonを使用してテキストファイルを作成および書き込みしようとしています。このエラーの解決策/理由を検索しました。

動作しないコードは次のとおりです。

afile = 'D:\\temp\\test.txt'
outFile = open(afile, 'w' )
outFile.write('Test.')
outFile.close()

# Error: 2
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
# IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' #

私が見つけたほとんどの答えは、パスのスラッシュに関連しているので...

I tried 'D:/temp/test.txt' and got an error.
I tried r'D:\temp\test.txt' and got an error.

D:/のルートにファイルを作成しようとすると、成功します。

'D:/test.txt' works.
'D:\\test.txt' works.
r'D:\test.txt' works.

ファイルを作成しようとしているときに、希望するディレクトリパスを作成できないようです。特定のパスにPythonを使用してファイルを作成する正しい方法は何ですか?open()ができることを誤解していますか?ディレクトリが存在しない場合は作成しますか? 'write'モードでopen()を使用してファイルを作成する前に、明示的にディレクトリパスを作成する必要がありますか?

21
gonzalimator

openが成功するためには、ファイルの親ディレクトリが存在している必要があると推測できます。これに対処する簡単な方法は、 _os.makedirs_ を呼び出すことです。

ドキュメント から:

os.makedirs(path [、mode])

再帰的なディレクトリ作成機能。 mkdir()に似ていますが、リーフディレクトリを含めるために必要なすべての中間レベルのディレクトリを作成します。

したがって、コードは次のように実行されます。

_filename = ...
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
    os.makedirs(dirname)
with open(filename, 'w'):
    ...
_
39
David Heffernan

存在しないディレクトリにファイルを作成しようとすると、そのエラーが発生します。

最初にディレクトリが存在することを確認する必要があります。 この答え に従ってos.makedirs()でそれを行うことができます。

2
paxdiablo

または、次の方法でファイルを開く前にファイルが存在するかどうかを確認できます。

os.path.exists (afile)

存在するかどうかに応じて、TrueまたはFalseと表示されます。

1
aMoon