programing

os.path.join에 대한 Pathlib 대안이 있습니까?

lovejava 2023. 5. 14. 09:56

os.path.join에 대한 Pathlib 대안이 있습니까?

현재 다음을 사용하여 파일의 상위 디렉토리에 액세스하는 중입니다.Pathlib다음과 같이:

Path(__file__).parent

인쇄하면 다음과 같은 출력이 나타납니다.

print('Parent: ', Path(__file__).parent)
#output
/home/user/EC/main-folder

main-folder을 가지고 있습니다..env액세스하고 싶고 이를 위해 상위 경로에 가입하고 싶은 파일.env지금, 저는 했습니다.

dotenv_path = os.path.join(Path(__file__).parent, ".env")

효과가 있는 것.하지만 저는 알고 싶습니다, 만약에.Pathlib와 교대로.os.path.join()다음과 같은 것:

dotenv_path = pathlib_alternate_for_join(Path(__file__).parent, ".env")

예, 다음이 있습니다.

env_path = Path(__file__).parent / ".env"

/당신이 필요한 것은 전부입니다.이것은 다른 OS에서 작동합니다.

다음과 같은 것을 사용할 수 있습니다.

(Path(__file__).parent).joinpath('.env')

설명서:

통속적인경로.join 경로

의 다음 정의는 다음과 같습니다.filepathOS.path.path.path에 더 가까운 정신?

import pathlib
main_dir = 'my_main_dir'
sub_dir = 'sub_dir'
fname = 'filename.tsv'
filepath = pathlib.PurePath(main_dir, sub_dir, fname)

경로 개체 및 문자열을 간단하게 결합할 수 있습니다.

    import pathlib
    script_parent_path = pathlib.Path(__file__).parent
    my_dir = ".env"
    my_new_path = pathlib.Path(script_parent_path, my_dir)
    print(my_new_path)

그 이유는 다음과 같습니다.

Pathlib의 생성자는 경로 세그먼트를 허용합니다.경로 세그먼트의 각 요소는 OS를 구현하는 개체인 경로 세그먼트를 나타내는 문자열일 수 있습니다.문자열 또는 다른 경로 개체를 반환하는 PathLike 인터페이스 - https://docs.python.org/3/library/pathlib.html#pathlib.PurePath

경로를 연결하는 가장 쉬운 방법은

Path(Path(__file__).parent,".env")

정의도 참조하십시오.

설명서에서 PurePath에 대해 다음 문장과 예제가 제공됩니다.

여러 개의 절대 경로가 주어지면 마지막 경로가 앵커로 사용됩니다(os.path.join()의 동작을 모방함).

>>> PurePath('/etc', '/usr', 'lib64')

PurePosixPath('/usr/lib64')

>>> PureWindowsPath('c:/Windows', 'd:bar')

PureWindowsPath('d:bar')

어떻게 하는지 궁금해하는 사람들을 위해./에서 내부적으로 작동합니다.pathlib.Path:

    # this is where the magic begins! (overload the '/' operator)
    def __truediv__(self, key): 
        try:
            return self._make_child((key,))
        except TypeError:
            return NotImplemented


    def _make_child(self, args):
        drv, root, parts = self._parse_args(args)
        drv, root, parts = self._flavour.join_parsed_parts(
            self._drv, self._root, self._parts, drv, root, parts)
        return self._from_parsed_parts(drv, root, parts)


    @classmethod
    def _from_parsed_parts(cls, drv, root, parts):
        self = object.__new__(cls)
        self._drv = drv
        self._root = root
        self._parts = parts
        return self  # finally return 'self', which is a Path object.

언급URL : https://stackoverflow.com/questions/61321503/is-there-a-pathlib-alternate-for-os-path-join