zenn.skin 무료버전 배포중!
자세히보기

Python/Syntax

[Python] pathlib

koosco! 2023. 4. 7. 03:10
 

pathlib — Object-oriented filesystem paths

Source code: Lib/pathlib.py This module offers classes representing filesystem paths with semantics appropriate for different operating systems. Path classes are divided between pure paths, which p...

docs.python.org

pathlib은 file system을 PosixPath 객체를 사용해  경로를 객체지향 방식으로 사용할 수 있게 해주는 모듈입니다.

pathlib을 사용하면 os 모듈을 사용할 때보다 더 직관적으로 파일과 폴더에 접근할 수 있는 장점이 있습니다.

pathlib을 사용하면 다음과 같은 장점이 있습니다.

  • 디렉토리나 파일을 Path객체로 만들 수 있습니다.
  • 플랫폼에 독립적이기 때문에 os에 관계없이 동일한 코드를 사용할 수 있습니다.
  • os모듈보다 직관적인 구문을 사용할 수 있습니다.
    • os에서는 join을 사용해 path를 붙일 수 있다.
    • pathlib에서는 "/" 연산자를 이용해 path를 간단하게 붙일 수 있다.
  • 파일 및 디렉토리 검색, 패턴 일치 등 다양한 기능을 제공합니다.

1. 폴더, 파일 생성, 접근 및 삭제

from pathlib import Path

base_path = Path('/content/data')

if not base_path.exists():
  # 폴더 존재 여부 확인
  base_path.mkdir() # 폴더 생성

file_path = base_path / 'koos.txt' # 경로 조인
file_path.write_text('Hello') # 파일 쓰기

contents = file_path.read_text() # 파일 읽기
print(contents)

file_path.rename('new_file.txt') # 파일명 변경
file_path.unlink() # 파일삭제
file_path.rmdir() # 폴더삭제

Path를 이용해 해당 경로를 갖는 객체를 생성할 수 있습니다.

해당하는 경로가 존재하지 않는다면 폴더를 생성할 수 있고, "/" 연산자를 이용해 간단하게 경로를 조인할 수 있습니다.

이외에도 데이터에도 쉽게 접근 가능한데, txt파일이나 csv, json파일을 읽고 쓸 수 있습니다.

import csv
from pathlib import Path

file_path = Path('~~')

with file_path.open() as csv_file:
  csv_reader = csv.reader(csv_file)
  for row in csv_reader:
    ...

빈 디렉터리가 아닌 경우

2. 경로 정보

file_path.exists() # 파일 존재 여부 확인
file_path.absolut() # 절대 경로 확인
file_path.name # 파일 이름 반환
file_path.parent # 파일이 위치한 폴더 반환

3. 파일생성

from pathlib import Path

new_dir = Path('/path/to/new/directory')
new_dir.mkdir(parents=True, exist_ok=True)

parents 파라미터를 True로 설정하면 경로에 설정한 상위 디렉터리가 없는 경우에 같이 생성해줍니다.

exist_ok 파라미터를 True로 설정하면 디렉터리가 이미 있을 때 오류가 발생하지 않게 해줍니다.

4. 연산자

경로 차이를 나타내는 메서드

path1 = Path('/path/to/dir1')
path2 = Path('/path/to/dir1/subdir/file.txt')

res = path2.relative_to(path1)
print(res) # 'subdir/file.txt'

+와 / 연산자

path1 = Path('/path/to/dir1')
path2 = Path('/subdir/file.txt')

res1 = path1 / path2
print(res1) # /path/to/dir1/subdir/file.txt

res2 = path1 + path2
print(res2) # /path/to/dir1subdir/file.txt

/ 연산자는 두 경로가 주어질 때 두 경로를 /를 이용해 붙여줍니다. 반면 + 연산자를 사용하면 중간에 /를 넣지 않고 단순히 concatenate해줍니다.

5. glob

dir = Path(/path/to/dir')
files = dir.glob('*.csv')

for file in files:
  print(file.name)

pathlib의 다른 기능도 엄청 편리한데 glob기능도 편하게 사용할 수 있는 점이 매력적이었습니다. 데이터를 읽어올 일이 많은데 보통 경로 관리를 위해 os나 glob 모듈을 많이 사용했는데 경로를 객체로 사용하는 것만으로도 좀 더 편리하게 데이터를 불러올 수 있을 것 같습니다.

'Python > Syntax' 카테고리의 다른 글

[Colab] 파이썬 버전 설정(변경)  (0) 2023.06.13
[Pytorch] 기초 문법  (0) 2023.03.26
[Numpy] hstack  (2) 2023.03.23
[Pandas] 함수 정리  (0) 2023.02.09
[Python] while ~ else문  (0) 2023.01.17

'Python/Syntax'의 다른글

  • 현재글 [Python] pathlib

관련글