_os.mkdir
_を呼び出して、生成された特定のデータセットを含むフォルダーを作成しています。ただし、指定したパスが作成されていなくても、os.mkdir(path)
はパスが既に存在するというOSErrorを発生させます。
たとえば、私は呼び出します:
_os.mkdir(test)
_
Testディレクトリまたはtestという名前のファイルがどこにもないとしても、この呼び出しは_OSError: [Errno 17] File exists: 'test'
_になります。
注:私が使用する実際のパス名は「テスト」ではありませんが、どこにも名前が付けられていないことは確かだとわかりにくいものです。
助けてください?
グレッグの答えは正しいのですが、十分ではありません。 OSError
にはサブエラー状態があり、毎回それらを抑制することは望ましくありません。 expected OSエラーのみをトラップするのが賢明です。
次のように、例外を抑制する前に追加のチェックを行ってください。
import errno
import os
try:
os.mkdir(dirname)
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
pass
おそらくerrno.EACCES
(許可が拒否されました)、errno.ENOSPC
(デバイスにスペースが残っていません)、errno.EROFS
(読み取り専用ファイルシステム)などを抑制したくないでしょう。に-しかし、それはあなたが構築しているものの特定の論理に基づいた意識的な決定である必要があります。
GregのコードはすべてのOSエラーを抑制します。 except Exception
が安全でないように、それは安全ではありません。
パスが存在するかどうかを確認してください。作成しない場合
if not os.path.exists(test):
os.makedirs(test)
Python 3.2以降では、次を使用できます。
os.makedirs(path, exist_ok=True)
ディレクトリが既に存在する場合に例外が発生しないようにします。 path
が存在し、ディレクトリではない場合、これは依然として例外を発生させます。
特に、文字列「test」に複数のディレクトリ名が含まれる場合も、同じ問題に直面しました。したがって、「test」に単一のディレクトリが含まれる場合-
if not os.path.exists(test):
try:
os.makedir(test)
except:
raise OSError("Can't create destination directory (%s)!" % (test))
「テスト」に「\ dir1\dir2」のような複数のディレクトリが含まれている場合-
if not os.path.exists(test):
try:
os.makedirs(test)
except:
raise OSError("Can't create destination directory (%s)!" % (test))
test
という名前のファイルがあります。まったく同じ名前のディレクトリを作成することはできません。
Windowsで私に起こった、多分これは事実です:
あなたのように私はしようとしていた:
os.mkdir(dirname)
OSError: [Errno 17] File exists: '<dirname>'
。私が走ったとき:
os.path.exists(dirname)
私は虚偽になり、それはしばらく私を怒らせた:)
問題は、特定のウィンドウで特定のディレクトリにいたことです。その時点では存在していませんでした(Linuxから削除しました)。解決策は、そのウィンドウを閉じて\他の場所に移動することでした。恥ずかしい、知ってる...
ファイルシステムの詳細がわかりません。しかし、本当にこれを回避したい場合は、try/except句を使用できますか?
try:
os.mkdir(test)
except OSError:
print "test already exists"
その間、いつでも何らかのデバッグを行うことができます。
たぶん、そのディレクトリにtestという名前の隠しフォルダーがあります。存在するかどうか手動で確認してください。
ls -a
ファイルが存在しない場合にのみ作成してください。
if not os.path.exists(test):
os.makedirs(test)
python 2.7
from distutils.dir_util import mkpath
mkpath(path)