2011-01-20 5 views
0

폴더를 만들고 출력 파일을 저장하는 코드가 있습니다. try-except-else 블록과 덮어 쓰기 옵션을 사용하여 True 또는 False로 설정할 수 있으므로 폴더가 이미 있고 덮어 쓰기가 false로 설정된 경우 폴더가 이미 존재 함을 표시합니다. 다른 모든 경우에는 주석없이 실행됩니다.파이썬에서 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에서 몇 가지 사항을 작성해야하는 스타일이 너무 많이 떠오르며 매우 Pythonic하지 않습니다.

답변

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로 덮어 쓰기) 일 경우 실행 코드 블록을 필요로한다는 것이다 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... 

경로가 존재하지만 디렉토리가 아닌 파일인지 확인해야 할 수도 있습니다.