IT

파일이 존재하는지 확인하는 Pythonic 방법?

lottoking 2020. 5. 17. 10:55
반응형

파일이 존재하는지 확인하는 Pythonic 방법? [복제]


이 질문에는 이미 답변이 있습니다.

파일이 존재하는지 여부를 확인하는 기본 방법은 무엇입니까?


경로가 기존 파일인지 확인하려면

os.path.isfile(path)

경로 가 기존 일반 파일 인 True경우 반환 합니다. 이 기호 링크를 따라, 그래서 모두 동일한 경로에 대해 사실이 될 수 있습니다.islink()isfile()


os.path.isfile다른 사람들이 제안한 대신을 사용 os.path.exists하는 것이 좋습니다 .이 파일은 일반 파일인지 여부뿐만 아니라 해당 이름을 가진 모든 항목을 검사합니다.

그러므로:

if not os.path.exists(filename):
    file(filename, 'w').close()

또는

file(filename, 'w+').close()

후자는 파일이있는 경우 파일을 작성하지만 그렇지 않은 경우 파일을 작성합니다. 그러나 파일이 존재하면 실패하지만 파일을 쓸 수있는 권한이 없습니다. 그래서 첫 번째 솔루션을 선호합니다.


여기에있는 다른 모든 답변은 제안 된 솔루션으로 발생하는 경쟁 조건을 해결하지 못하는 것 같습니다.

파일 존재를 먼저 확인한 다음 프로그램에서 몇 줄 후반에 코드를 작성하면 파일을 보지 않고 문제가 발생하거나 파일 소유자가 발생하는 동안 파일이 생성 될 위험이 있습니다. "다른 파일"문제).

이런 종류의 것을 피하고 싶다면 다음과 같은 것을 제안합니다.

import os

def open_if_not_exists(filename):
    try:
        fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
    except OSError, e:
        if e.errno == 17:
            print e
            return None
        else:
            raise
    else:
        return os.fdopen(fd, 'w')

파일이 없으면 쓰기 위해 파일을 열고 파일 객체를 반환해야합니다. 존재하는 경우 "Ooops"를 인쇄하고 None을 반환합니다 ( 예상되지 않은 python documentation 읽기만을 기반으로 하므로 100 % 정확하지 않을 수 있음).


파일이 존재하지 않는 경우 파일을 비워 두려면 가장 간단한 방법은

with open(thepath, 'a'): pass

(Python 2.6 이상; 2.5에서는 모듈 상단에 "미래에서 가져 오기"가 필요합니다).

반면에 파일이 존재하는 경우 파일을 그대로 두려면 비어 있지 않은 특정 내용을 다른 곳에두면 if os.path.isfile(thepath):/ else문 블록을 기반으로 한 더 복잡한 접근법 이 더 적합합니다.


이것은 나에게 가장 좋은 방법이었습니다. 기존의 모든 파일을 검색 할 수 있습니다 (심볼릭 링크 또는 일반 파일).

os.path.lexists (경로)

Return True if path refers to an existing path. Returns True for broken symbolic links. Equivalent to exists() on platforms lacking os.lstat().

New in version 2.4.

참고 URL : https://stackoverflow.com/questions/2259382/pythonic-way-to-check-if-a-file-exists

반응형