HOWTO · Python

Python에서 파일 경로 설정

이 튜토리얼은 파이썬에서 파일 경로를 설정하는 방법을 보여줍니다.

이 페이지의 내용

경로는 파일이나 디렉터리의 위치를 나타내는 문자열 또는 경로 객체입니다. Python에서 Windows 경로를 지정할 때는 백슬래시를 이스케이프하거나 원시 문자열을 사용하고, 경로 구성 요소를 결합할 때는 pathlib.Path를 우선 사용하거나 os.path.join()을 사용할 수 있습니다. 경로를 구성하는 것만으로 파일이 열리거나 존재 여부가 확인되는 것은 아니며, 파일이 실행되거나 Python의 import 검색 경로가 바뀌지도 않습니다.

Windows 경로 문자열에서 백슬래시 이스케이프하기

일반 Python 문자열에서 백슬래시는 이스케이프 시퀀스의 시작을 나타냅니다. Windows 경로의 백슬래시를 각각 두 번 써야 합니다. 예를 들면 "C:\\Users\\Ada\\report.csv"와 같습니다. 이렇게 하면 \n 같은 문자열이 줄바꿈 문자로 해석되는 것을 막을 수 있습니다. 백슬래시를 두 번 쓴 형태는 Python 소스 코드에서의 표기이며, 실제 문자열에는 각 구분 위치에 백슬래시 하나가 들어갑니다.

Windows 경로에 원시 문자열 리터럴 사용하기

문자열 리터럴 앞에 r을 붙이면 Python이 백슬래시를 입력한 그대로 유지합니다. 예를 들면 r"C:\Users\Ada\report.csv"와 같습니다. 원시 문자열도 Python 문자열 리터럴의 문법을 따르므로 백슬래시가 홀수 개로 끝날 수 없습니다. 마지막 백슬래시가 닫는 따옴표를 이스케이프하기 때문입니다. 디렉터리 경로 끝에 구분자가 필요하면 다른 구성 요소를 이어 붙이거나 백슬래시를 이스케이프한 일반 문자열을 사용하세요.

os.path.join()으로 경로 구성하기

os.path는 모듈이고, os.path.join()은 경로 구성 요소를 결합하는 함수입니다. os.path API를 참고하세요. 이 링크는 영어 페이지를 가리키며, 제공된 링크 인벤토리에는 한국어 대상이 없습니다. 디렉터리와 파일 이름을 별도 구성 요소로 전달합니다. 예를 들면 os.path.join("reports", "annual", "summary.csv")와 같습니다. 이 함수는 실행 중인 운영 체제의 경로 규칙을 따릅니다. 파일을 찾아 주거나 프로젝트 디렉터리를 선택하지는 않습니다. 뒤에 오는 구성 요소가 절대 경로이면 결과가 달라질 수도 있으므로 의도한 구성 요소를 전달하세요.

pathlib.Path로 경로 구성하기

일반적인 경로 구성에는 객체 지향 인터페이스를 제공하는 pathlib.Path를 사용할 수 있습니다. 문자열로 경로를 만들고 / 연산자로 구성 요소를 이어 붙이세요. 이 예제는 상대 경로를 구성해 값을 출력할 뿐, 파일에 접근하지 않습니다. 아래 출력은 POSIX 환경에서의 결과입니다. 같은 Path 표현식도 Windows에서는 백슬래시로 표시됩니다.

from pathlib import Path

report_path = Path("reports") / "annual" / "summary.csv"
print(report_path)
reports/annual/summary.csv

표시되는 경로의 형태는 운영 체제에 따라 다릅니다. Path는 현재 플랫폼의 규칙에 따라 경로를 표현합니다. 파일 시스템에 접근하지 않고 다른 운영 체제에서 Windows 형식의 경로를 다뤄야 한다면 PureWindowsPath를 사용하세요.

절대 경로 구성하기

절대 경로는 파일 시스템의 루트에서부터 위치를 나타냅니다. Windows의 드라이브가 지정된 예는 Path(r"C:\Users\Ada") / "reports" / "summary.csv"입니다. 하지만 같은 표기가 모든 운영 체제에서 절대 경로인 것은 아닙니다. 현재 플랫폼에서 사용할 경로라면 Path.home()이나 Path.cwd()처럼 절대 경로인 기준 위치에서 시작해 나머지 구성 요소를 이어 붙이세요. os.path에서는 os.path.join(base, "reports", "summary.csv")로 구성 요소를 결합할 수 있고, os.path.abspath(relative_path)는 상대 경로를 프로세스의 현재 작업 디렉터리를 기준으로 해석합니다. 어느 쪽도 대상 경로가 실제로 존재하는지 확인하지는 않습니다.

상대 경로 사용하기

상대 경로는 파일 시스템 루트가 아니라 기준 디렉터리에서부터 위치를 나타냅니다. 예를 들어 Path("data") / "input.csv"는 상대 경로입니다. 프로그램이 이 경로로 파일 시스템에 접근하면, 프로그램이 별도의 기준 위치를 지정하지 않는 한 운영 체제는 프로세스의 현재 작업 디렉터리를 기준으로 경로를 해석합니다. 현재 작업 디렉터리는 Python 스크립트가 있는 디렉터리와 다를 수 있으므로 프로그램이 실행되는 방식에 맞는 기준 위치를 선택하세요.

알고 있는 디렉터리를 기준으로 상대 경로를 만들려면 먼저 그 기준 경로를 명시한 뒤 구성 요소를 이어 붙이세요. 예를 들면 project_dir / "data" / "input.csv"와 같습니다. 문자열 경로에서는 이에 해당하는 os.path.join(project_dir, "data", "input.csv")를 사용할 수 있습니다. 이러한 작업은 경로 값만 구성하므로 파일을 읽거나 쓰거나 확인할 때는 별도의 파일 API를 사용하세요.