2012-12-28 2 views
4

파일 "data.txt"를 cwd 및 readthe 행에서 열려고 시도하고 있는데, 파일이 존재하지 않으면 서브 루틴을 끝내는 oneliner (또는 닫기)가 있습니까? .. 난이 os.path.exists를 사용하는 등의 방법이 있으며 IO 오류를 제외하고/시도하지만, 한 줄 또는 with 개방파일이 존재하지 않는 경우 서브 루틴을 끝내는 현명한 방법

with open('data.txt') as f: 
    lines = f.readlines() 

을 사용할 수 있습니다

def readfile(): 
    f = open('data.txt') 
    lines = f.readlines() 
    f.close() 

답변

2
당신은 os.path.exists을 사용할 수 있습니다

conditional expression : 당신이 (발신자가 소비로는 많은 행을 읽습니다) 게으른 평가에 있다면

import os.path as opath 

def readlines(path): 
    return open(path).readlines() if opath.exists(path) else [] 

을 그리고하는 generator expression와 결합 :

import os.path as opath 

def readlines(path): 
    try: 
     return (l for l in open(path)) if opath.exists(path) else() 
    except FileNotFoundError: 
     return() 
+2

이것은 경쟁 조건을 가지고 있습니다 :'exists'를 호출하면 파일이 한 지점에 존재했음을 알려줄 것입니다. 'open (path) .readlines()'를 호출했을 때 genexp가 반복 될 때 훨씬 적은 시간이 걸릴 것이라고 확신 할 수는 없습니다. 따라서 어쨌든 예외를 잡을 준비가되어 있어야합니다 .. – DSM

+0

간단히 말해서 입출력. – Misandrist

7

가장 똑똑한 방법에 관심이 알고 with 문은 중첩 된 코드 블록 다음에 파일을 자동으로 닫습니다. with 문을 사용할 때의 장점은 중첩 된 블록의 존재 여부에 관계없이 파일을 닫을 수 있다는 것입니다. 블록의 끝 이전에 예외가 발생하면 예외를 외부 예외 처리기가 포착하기 전에 파일을 닫습니다.

중첩 된 블록에 return 문이나 continue 또는 break 문이 포함되어 있으면 with 문은 이러한 경우에도 자동으로 파일을 닫습니다.

+0

내 질문에 파일이 실제로 존재하는지 확인하고 서브 루틴을 종료합니까? – user1927396

관련 문제