programing

pathlib의 절대 경로를 얻는 방법.경로 객체?

iphone6s 2023. 5. 2. 22:26
반응형

pathlib의 절대 경로를 얻는 방법.경로 객체?

경로 개체 만들기pathlib다음과 같은 모듈:

p = pathlib.Path('file.txt')

p예를 들어, 내가 할 수 있기 때문에, 객체는 파일 시스템의 어떤 파일을 가리킬 것입니다.p.read_text().

어떻게 하면 절대 경로를 얻을 수 있습니까?p문자열에 있는 개체?

예를 들어 사용할 수 있는 것으로 나타납니다.os.path.abspath(p)절대적인 경로를 얻기 위해, 하지만 사용하는 것은 어색합니다.os.path방법, 내가 가정하기 때문에.pathlib의 대체품이 되어야 합니다.os.path.

사용하다resolve()

다음과 같이 간단히 사용합니다.

p = p.resolve()

이렇게 하면 경로가 절대적으로 되고 모든 상대적인 부분이 절대적인 부분으로 대체되고 모든 심볼릭 링크가 물리적인 경로로 대체됩니다.대/소문자를 구분하지 않는 파일 시스템에서는 대/소문자를 표준화합니다.file.TXT된다file.txt).

피하다absolute()Python 3.11 이전 버전

대체 방법absolute()Python 3.11 이전에는 문서화되거나 테스트되지 않았습니다(@Jim Fasarakis Hilliard가 만든 버그 보고서의 설명 참조).

수정 사항은 2022년 1월에 통합되었습니다.

차이

사이의 차이resolve그리고.absolute그것은absolute()경로의 기호적으로 연결된(심링크) 부분을 대체하지 않으며, 절대 상승하지 않습니다.FileNotFoundError또한 대소문자를 수정하지 않습니다.

피하고 싶다면,resolve()(예: 심볼 링크, 케이스 또는 관련 부품을 유지하려는 경우) Python < 3.11:

p = Path.cwd() / "file.txt"

이것은 제공하는 경로가 절대적인 경우에도 작동합니다. 그 경우에는cwd(현재 작업 디렉토리)는 무시됩니다.

Windows에 존재하지 않는 파일 주의

파일이 존재하지 않으면 Windows의 Python 3.6에서 3.9에서resolve()현재 작업 디렉터리 앞에 추가하지 않습니다.Python 3.10에서 수정된 문제 38671을 참조하십시오.

파일을 찾을 수 없음 주의 오류

v3.6 이전 버전의 Python에서는resolve() 를 증가시키나요FileNotFoundError경로가 디스크에 없는 경우.

그래서 만약 위험이 있다면, 사전에 확인하세요.p.exists()또는 오류를 시도/수정합니다.

# check beforehand
if p.exists():
    p = p.resolve()

# or except afterward
try:
    p = p.resolve()
except FileNotFoundError:
    # deal with the missing file here
    pass

처음부터 디스크에 없는 경로를 처리하고 있고 Python 3.6+에 있지 않은 경우 다음으로 되돌리는 것이 가장 좋습니다.os.path.abspath(str(p)).

3.6부터.resolve()상승만FileNotFoundError를 사용하는 경우strict논쟁.

# might raise FileNotFoundError
p = p.resolve(strict=True)

하지만 주의하세요, 사용하세요.strict3.6 이전 버전의 파이썬과 호환되지 않는 코드를 만듭니다.strict논쟁.

당신은 그 방법을 찾고 있습니다..absolute만약 내가 이해한 것이 맞다면, 누구의 문서에 다음과 같이 명시되어 있습니다.

>>> print(p.absolute.__doc__)
Return an absolute version of this path.  This function works
        even if the path doesn't point to anything.

        No normalization is done, i.e. all '.' and '..' will be kept along.
        Use resolve() to get the canonical path to a file.

시스템에 테스트 파일이 있는 경우 다음과 같이 반환됩니다.

>>> p = pathlib.Path('testfile')
>>> p.absolute()
PosixPath('/home/jim/testfile')

방법은 새로운 것 같습니다. 그리고 여전히, 문서화되지 않은 추가. Path 그리고 Path 상속 객체

문제를 문서화하기 위해 문제를 만들었습니다.

경로만 원하는 경우 파일이 있는지 확인하지 않으려면 다음을 수행할 수 있습니다.

str(p)

작업 섹션의 문서로 사용할 수 있습니다.

pathlib.Path.cwd() / p

이것은 Cython 핵심 개발자들에 의해 "분명한 한 가지 방법"으로 권장됩니다.

p.resolve()윈도우즈에 존재하지 않는 파일에 대한 절대 경로를 반환하지 않습니다.

p.absolute()문서화되지 않았습니다.

언급URL : https://stackoverflow.com/questions/42513056/how-to-get-absolute-path-of-a-pathlib-path-object

반응형