pathlib - Python 파일 입출력시 OS 호환성을 높히는 라이브러리

코스·2020년 9월 20일
0
post-thumbnail

Python에서 파일 입출력을 fun하고 cool하고 sexy하게 다루는 법... 그것이 Python이니까 ✨

Python에서 OS 호환성?

Python은 개발환경이 달라도 가상 머신을 통해 실행되기 때문에 (자세한 설명은 여기를 참조하세요) 다른 환경에서 같은 코드를 작성해도 거의 동일하게 작동하지만, 운영체제의 특성때문에 항상 불편하게 코딩해야 하는 부분이 바로 파일의 경로 입니다. 특히 Windows와 그 외 운영체제(macOS, Linux등)의 경로 문자가 다릅니다.

Windows filenames:
C:\some_folder\some_file.txt

Most other operating systems:
/some_folder/some_file.txt

파일 경로를 처리하는 이전 방식들

가장 무식한 방법으로는, 현제 실행중인 운영체제가 Windows냐 아니냐에 따라 다른 파일 경로를 가져올 수 있습니다. 이렇게 하게 된다면 Windows, 비Windows 경로 문자열을 따로 저장하고 관리하기 때문에 이후 유지보수 할 때 엄청 귀찮은 작업을 반복해야 되는 것입니다.

그래서 예전에는 os 라이브러리에 있는 os.path.join() 함수를 사용해 파일 경로 문자열을 만들었습니다. 위 두 파일 경로를 보면, Windows와 비Windows 경로 문자열의 차이는 /\ 차이만 있습니다. 이를 감지하고 처리하주는 함수가 os.path.join() 함수입니다. 이 함수를 사용하면 운영체제에 따라 각각 다른 슬래쉬 (/또는 \)로 연결해줍니다.

import os.path

my_path = os.path.join("some_folder", "some_file.txt")
# "some_folder\some_file.txt" or "some_folder/some_file.txt"
print(my_path)

다만, 위 함수를 사용하면 새로운 폴더에 들어갈 때마다 매번 함수를 사용하기 때문에 이 또한 귀찮습니다. 그래서 이 글에서 다룰 pathlib 라이브러리를 사용하는 방식이 최근에 사용되고 있습니다.

pathlib 라이브러리

pathlib 라이브러리는 Python 3.4에 추가된 라이브러리입니다. 사용하는 방법은 어렵지 않습니다. 라이브러리에 있는 Path 클래스를 통해 객체를 만들면 됩니다.

from pathlib import Path

pathobj = Path("some_folder/some_file.txt")

여기에서 중요한 점은 Path 객체를 만들 때 넣는 문자열로 Windows 경로 문자열이던 비Windows 경로 문자열이던 아무런 경로 문자열을 넣어도 상관이 없다는 것입니다. pathlib에서 집어넣은 경로를 알아서 파싱을 해 PurePath로 저장해 두고, 이를 사용할 때 사용되는 환경에 따라 PosixPathWindowsPath로 변화되어 사용됩니다.

또한 pathlib 라이브러리에서는 이를 경로로 사용하는 것 뿐만 아니라 이에 대한 파일 관련 변수, 함수들을 제공합니다. 대표적인 함수들은 다옴과 같습니다.

print(pathobj.name) # some_file.txt
print(pathobj.stem) # some_file
print(pathobj.exists()) # true if file exists

특히 file object를 리턴해주는 open함수를 내장지원해 Path 객체로 바로 파일을 열어 사용할 수 있습니다.

p = Path('setup.py')
with p.open() as f:
    f.readline()

참고문서

profile
잡다한거 하는 개발자

0개의 댓글