itsource

파일이 있는지 확인하는 방법?

mycopycode 2022. 9. 24. 12:34
반응형

파일이 있는지 확인하는 방법?

파일이 존재하는지, 생성되지 않았는지 확인하는 방법은 무엇입니까?

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

os.path.isfile(path)

돌아가다True경로가 기존 일반 파일인 경우.이것은 심볼릭 링크를 따르기 때문에 둘 다islink()그리고.isfile()같은 경로에 대해 true일 수 있습니다.

대신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')

파일이 아직 존재하지 않는 경우 쓰기 위해 파일이 열리고 파일 개체가 반환됩니다.존재하는 경우 "OOPS"를 인쇄하고 "None"을 반환합니다(테스트되지 않았으며 python 문서를 읽는 것만으로 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

반응형