2011-01-20 4 views
0

私は、フォルダを作成し、その中に出力ファイルを配置するコードを持っています。 try-except-elseブロックと上書きオプションを使用して、TrueまたはFalseに設定することができます。その場合、フォルダが既に存在し、上書きがfalseに設定されている場合、フォルダが既に存在することを表示しますそれ以外の場合はコメントなしで実行されます。pythonでtry-except-elseで上書きを制御するよりエレガントな方法はありますか?またはCスタイルのコードよりも優れた処理をすることはできますか?

私が作ってみた唯一の解決策は、これまでのところ、次のようになります

def function(parameters, overwrite = False): 
    try: 
     os.makedirs(dir) 
    except OSError: 
     if overwrite: 
      data making code... 
     else: 
      print dir + ' already exists, skipping...' 
    else: 
     if overwrite: 
      data making code... 

は、この問題に対するより良い、またはちょうどよりエレガントな解決策多分ありますか?例えば、私のデータ作成コードを複製する必要はありませんか?このようにすると、私はC言語でいくつかのことを書く必要がなくなり、非常にPythonのように見えないスタイルをあまりにも思い起こさせます。

答えて

2

(ビルダニエルDiPaoloの答えに)

import os, errno 

def mkdir(path, overwrite=False): 
    try: 
     os.makedirs(path) 
    except OSError as exc: # Python >2.5 
     if exc.errno == errno.EEXIST: 
      if not overwrite: 
       print "path '%s' already exists" % path # overwrite == False and we've hit a directory that exists 
       return 
     else: raise 
    # data making code... 
5

あなたはすでにかなり近いです。 from this answer適応:あなたはtryブロックにelseを必要とするだろう、なぜ私は表示されません

import os, errno 

def mkdir(path, overwrite=False): 
    try: 
     os.makedirs(path) 
    except OSError as exc: # Python >2.5 
     if exc.errno == errno.EEXIST: 
      if not overwrite: 
       print "path '%s' already exists" % path # overwrite == False and we've hit a directory that exists 
     else: raise 

+0

問題は、ディレクトリの作成とは別に、私は= Trueの上書き)1場合に実行するコードのブロックを必要とする、ということですか、2)ディレクトリがなかったですもともとは存在しない。 elseブロックなしで両方のケースをどのようにカバーできますか? – tel

+3

@tel:try/exceptコードの後に​​置くだけです。次に、 'return'ステートメントを、それが既に存在することを印刷した後に置いてください。そうすれば、 'os.makedirs'が成功した場合や上書きがTrueの場合、出力が終了します。 –

+0

'errno'をチェックするのではなく、' os.path.exists(path) 'はどうでしょうか? – Apalala

0
if not os.path.isdir(path): 
    os.makedirs(path) 
elif not overwrite: 
    return # something ? 
pass # data making code.... 

makedirsを使用してディレクトリの存在をテストする理由があります。その場合:

try: 
    os.makedirs(dir) 
except OSError: 
    if not overwrite: 
     print dir + ' already exists, skipping...' 
     return 
pass # data making code... 

また、パスが存在するが、ファイルではなくディレクトリであるかどうかをチェックすることをお勧めします。

関連する問題