Skip to content

Python:pathlib

Path

iterdir

디렉토리일 경우 하위 해당 디렉토리에 있는 전체 파일 목록을 반환한다. (recursive 하게 적용되지 않는다)

import pathlib
a = pathlib.Path('.')
for a in a.iterdir():
    print(a)

동일한 위치인지 확인하는 방법

Path.resolve로 경로를 정규화 한 후 비교하면 된다.

from pathlib import Path

a = Path("./../unwiki")
b = Path("/home/your/Project/unwiki")
a == b  # False

a.absolute()  # PosixPath('/home/your/Project/mwfilter/../unwiki')
b.absolute()  # PosixPath('/home/your/Project/unwiki')
a.absolute() == b.absolute()  # False

a.resolve()  # PosixPath('/home/your/Project/unwiki')
b.resolve()  # PosixPath('/home/your/Project/unwiki')
a.resolve() == b.resolve()  # True

상속 받는 방법

_flavour 속성을 설정해야 한다.

Path 클래스는 직접 인스턴스화될 수 없으며, 실제로는 내부적으로 OS에 따라 PosixPath 또는 WindowsPath와 같은 구체적인 클래스를 사용합니다. 이를 해결하기 위해 Path('.')._flavour와 같은 방식을 사용하여 현재 OS에 맞는 flavour를 지정합니다.

# -*- coding: utf-8 -*-

from os import PathLike
from pathlib import Path
from typing import Final, Optional, Union

DEFAULT_CVP_DIR_NAME: Final[str] = ".cvp"
DEFAULT_CVP_HOME_PATH: Final[str] = str(Path.home() / DEFAULT_CVP_DIR_NAME)


class HomeDir(Path):
    # noinspection PyUnresolvedReferences, PyProtectedMember
    _flavour = Path()._flavour

    @classmethod
    def from_path(cls, path: Optional[Union[str, PathLike[str]]] = None):
        return cls(path if path else DEFAULT_CVP_HOME_PATH)

PathFlavour class

다음 클래스를 상속받으면 된다:

# -*- coding: utf-8 -*-

from pathlib import Path


class PathFlavour(Path):
    # noinspection PyProtectedMember
    _flavour = Path()._flavour  # type: ignore[attr-defined]

    def __init__(self, *_):
        super().__init__()

See also

파일과 디렉터리 액세스

  • Python:pathlib - 객체 지향 파일 시스템 경로
  • Python:os.path - 일반적인 경로명 조작
  • Python:fileinput - 여러 입력 스트림에서 줄을 이터레이트 하기
  • Python:stat - stat() 결과 해석하기
  • Python:filecmp - 파일과 디렉터리 비교
  • Python:tempfile - 임시 파일과 디렉터리 생성
  • Python:glob - 유닉스 스타일 경로명 패턴 확장
  • Python:fnmatch - 유닉스 파일명 패턴 일치
  • Python:linecache - 텍스트 줄에 대한 무작위 액세스
  • Python:shutil - 고수준 파일 연산

Favorite site