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 |