Python:pathlib
Path
iterdir
디렉토리일 경우 하위 해당 디렉토리에 있는 전체 파일 목록을 반환한다. (recursive 하게 적용되지 않는다)
동일한 위치인지 확인하는 방법
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 - 고수준 파일 연산