ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] pathlib 사용하기
    언어/파이썬 & 장고 2019. 1. 18. 22:02

    파이썬 3.4부터 내장함수로 pathlib가 추가되었습니다. pathlib가 추가되기 이전에는 os 모듈을 사용했습니다. pathlib는 파일위치 찾기, 파일 입출력과 같은 동작을 하는데 os모듈과 어떻게 다른지 아래에서 설명합니다.

    pathlib 설명

    pathlib 모듈의 기본 아이디어는 파일시스템 경로를 단순한 문자열이 아니라 객체로 다루자는 것입니다. 가령 파일의 존재성 여부를 판단하는 것은 아래와 같이 작성할 수 있습니다.

    import os
    from pathlib import Path
    
    file_path = './path/to/file'
    
    if os.path.exists(file_path):
        pass
    
    p = Path(file_path)
    
    if p.exists():
        pass


    파일시스템을 문자열이 아닌 객체로 다루게 되면서 얻게 된 큰 이익 중 하나는 연산자를 새롭게 정의할 수 있게 되었다는 점입니다.

    import os
    from pathlib import Path
    
    dir_name = 'dir'
    sub_dir_name = 'sub_dir_name'
    file_name = 'file_name'
    
    # 기존 (os.path)
    file = os.path.join(dir_name, sub_dir_name, file_name)
    
    # pathlib
    dir = Path(dir_name)
    file = dir / sub_dir_name / file_name

    pathlib은 슬래시(/)가 경로 구분 문자로 사용하여 직관적으로 이해할 수 있습니다.

    사용법

    파일 열기

    import pathlib
    
    
    path = pathlib.Path('test.txt')
    file = path.open('r')

    파일 읽고 쓰기

    파일을 읽거나 쓰는 행동을 1번만 하게 된다면 아래와 같이 할 수 있습니다.

    import pathlib
    
    # 읽기
    path = pathlib.Path('test.txt')
    file = path.read_text()
    
    
    # 쓰기
    path = pathlib.Path('test1.txt')
    path.write_text('파일쓰기')

    경로분석

    import pathlib
    
    
    path = pathlib.Path('/user/path/to/file')
    
    print(path)
    print(path.parent)
    print(list(path.parents))
    print(path.parts)
    
    
    # /user/path/to/file
    # /user/path/to
    # [PosixPath('/user/path/to'), PosixPath('/user/path'), PosixPath('/user'), PosixPath('/')]
    # ('/', 'user', 'path', 'to', 'file')

    실행한 스크립트 폴더경로 얻기

    import pathlib
    
    path = pathlib.Path.cwd()

    현재 위치한 파일/폴더 얻기

    glob 패턴을 사용하여 파일/폴더를 얻을 수 있습니다.

    import pathlib
    
    
    path = pathlib.Path('.')
    files = path.glob('*')
    
    print(list(files))

    현재 위치에서 존재하는 모든 파일/폴더 얻기

    위의 glob에서 패턴만 변경하여 현재 위치에서 모든 폴더(폴더 내 파일 포함)와 파일을 얻을 수 있습니다.

    import pathlib
    
    
    path = pathlib.Path('.')
    files = path.glob('**/*')
    
    print(list(files))


    기존에 사용하던 os 모듈을 사용하여 경로찾기나 파일입출력을 pathlib로 대체할 수 있습니다.


    댓글