2016-08-17 3 views
1

여러 파일의 존재 여부를 확인해야합니다. 가장 효율적인 방법은 무엇입니까? 실행하고 손 전에 권한을 묻는 것보다 용서를 물어 -`open (fname, 'r'). close()`와`os.path.isfile (fname)`의 차이점

list_of_files = [fname1,fname2,fname3] 
for fname in list_of_files: 
    try: 
     open(fname, 'r').close() 
    except IOError: 
     raise YourCustomError 

또는

list_of_files = [fname1,fname2,fname3] 
for fname in list_of_files: 
    if not ps.path.isfile(fname): 
     raise YourCustomError 
+1

'os.access()'는 어떻습니까? https://docs.python.org/2/library/os.html#os.access –

답변

1

공통의 철학이있다.

첫 번째 방법은 파일을 읽기 가능한 모드로 열려고 시도하고 존재하지 않거나 읽을 수없는 경우 실패합니다. 여기서 우리는 수술이 실패한 후에 용서를 구하고 있습니다.

두 번째 방법은 먼저 허가를 요청하는 것입니다. 그러나 두 번째 예제는 파일인지 여부를 확인하고 권한을 확인하지 않습니다.

그러나 파일 관리자를 수동으로 닫는 대신 컨텍스트 관리자 (with open(filename, "r"))를 사용하는 것이 훨씬 더 좋은 방법 일 수 있습니다.

1

여러 파일의 존재 여부를 확인해야합니다. 가장 효율적인 방법은 무엇입니까?

두 가지 접근 방식이 같은 일을하지 않기 때문에 이는 효율성 문제 만이 아닙니다. 사용 권한 때문에 파일이 exist and be unreadable to you 일 수 있습니다. 첫 번째 방법은 파일이 열려 있고 읽을 수 있는지 실제로 확인하는 유일한 방법입니다 (최소한 두 가지 방법 모두 경쟁 조건이 있습니다).

2

을 사용하는 경우을 사용하는 경우 이 아닙니다. 호출과 파일을 사용할 때 파일이 삭제되거나 사용 권한이 변경되어 해당 정보가 더 이상 사용되지 않게 될 수 있습니다. 대신 파일을 사용하려고 거기에 예외를 처리 :

try: 
    with open(fname, 'r') as f: 
     # use f 
except FileNotFoundError as e: 
    # file was deleted 
except IsADirectoryError as e: 
    # path exists but is a directory 
except PermissionError as e: 
    # you don't have permissions to read the file 
except OSError as e: 
    # other error 

당신이 사용자에게 사용 권한에 대한 정보를 표시하는 도구를 작성하지만, 다음이 제공 방법 및 기능을 사용하는 의미가있는 경우 특히이 목적이므로 os.path.existsos.is_fileos.is_dir을 사용해야합니다.

전체 디렉터리를 처리하는 경우 os.scandir을 사용하고 DirEntry 개체의 메서드를 확인하는 것이 더 효율적이라는 것에주의하십시오.