
파이썬 프로그래밍을 하며 입문자가 가장 먼저 마주하는 난관 중 하나는 바로 "FileNotFoundError"입니다. 코드는 완벽한데 파일을 찾지 못한다는 메시지가 뜨는 이유는 대부분 '경로(Path)' 설정에 대한 이해 부족에서 기인합니다. 본 가이드에서는 파일 시스템의 내비게이션 역할을 하는 절대 경로와 상대 경로의 개념을 명확히 정의하고, 실무에서 발생하는 경로 문제를 완벽하게 해결하는 방법을 제시합니다.
1. 경로(Path)란 무엇인가?
컴퓨터의 파일 시스템에서 특정 파일이나 디렉터리가 위치한 주소를 의미합니다. 파이썬 프로젝트가 커질수록 데이터 파일, 설정 파일, 로그 파일 등을 불러오기 위해 경로를 다루는 기술은 필수적입니다. 주소를 표현하는 방식에 따라 크게 두 가지로 나뉩니다.
- 절대 경로 (Absolute Path): 파일 시스템의 루트(Root)부터 목적지까지의 전체 주소를 의미합니다.
- 상대 경로 (Relative Path): 현재 작업 디렉터리(Current Working Directory)를 기준으로 목적지까지의 위치를 나타냅니다.
2. 절대 경로 vs 상대 경로: 3가지 핵심 차이 비교
어느 하나가 무조건 좋은 것이 아니라, 상황에 맞는 적절한 선택이 프로그램의 이식성과 안정성을 결정합니다.
| 비교 항목 | 절대 경로 (Absolute Path) | 상대 경로 (Relative Path) |
|---|---|---|
| 기준점 | 루트 디렉터리 (C:\ 또는 /) | 현재 실행 중인 위치 (CWD) |
| 표현 방식 | 전체 주소 기입 (고유함) | ., .. 등을 활용한 생략 표현 |
| 이식성 | 낮음 (다른 컴퓨터에서 작동 안 할 확률 높음) | 높음 (프로젝트 폴더 통째로 이동 시 유리) |
| 표기 예시 (Windows) | C:\Users\Admin\Project\data.csv | .\data.csv 또는 ..\data.csv |
3. 파이썬에서 경로 문제를 해결하는 2가지 전문적인 방법
단순히 문자열로 경로를 더하는 방식은 운영체제(Windows vs Linux)에 따라 에러를 유발할 수 있습니다. 전문가들은 다음과 같은 모듈을 사용하여 문제를 해결합니다.
방법 01. os.path 모듈 활용
전통적인 방식으로, 경로 구분자(/ 또는 \)를 운영체제에 맞춰 자동으로 처리해 줍니다.
방법 02. pathlib 모듈 활용 (추천)
파이썬 3.4부터 도입된 객체 지향적 경로 처리 모듈입니다. 가독성이 뛰어나고 직관적입니다.
4. [Sample Example] 실전 경로 제어 코드
현재 스크립트의 위치를 기준으로 절대 경로를 동적으로 생성하여 파일을 여는 안전한 예제입니다.
from pathlib import Path
import os
# 1. 현재 작업 디렉터리 확인
print(f"현재 위치: {os.getcwd()}")
# 2. 상대 경로를 절대 경로로 변환하여 파일 찾기 (pathlib 방식)
current_file = Path(__file__).resolve() # 현재 실행 중인 파일의 절대 경로
project_root = current_file.parent # 파일이 속한 폴더 경로
data_path = project_root / "data" / "config.json"
print(f"최종 타겟 경로: {data_path}")
# 3. 안전하게 파일 존재 여부 확인 후 열기
if data_path.exists():
with open(data_path, 'r', encoding='utf-8') as f:
print("파일 읽기 성공!")
else:
print("오류: 파일을 찾을 수 없습니다. 경로를 확인하세요.")
5. 결론: 유지보수가 쉬운 경로 설정 전략
개발 환경과 서버 운영 환경은 주소 체계가 다를 수밖에 없습니다. 따라서 코드 내부에 특정 사용자의 이름이 포함된 **절대 경로를 하드코딩하는 것은 반드시 피해야 합니다.** 프로젝트 루트를 기준으로 하는 **상대 경로**를 사용하거나, 실행 시점에 `pathlib`을 통해 동적으로 **절대 경로**를 추출하는 방식이 가장 견고한 해결책입니다.
내용의 출처 및 참고 문헌
- Python Official Documentation: "pathlib — Object-oriented filesystem paths"
- Microsoft Learn: "File path formats on Windows systems"
- Real Python: "Python 3's pathlib Module: Taming the File System"
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] 파일이 존재하는지 확인하는 효율적인 3가지 방법과 예외 처리 해결 가이드 (0) | 2026.03.13 |
|---|---|
| [PYTHON] 메모리 효율 100% 최적화 방법: 제너레이터(Generator)와 yield의 5가지 결정적 차이 및 해결 (0) | 2026.03.13 |
| [PYTHON] 데이터 스트림 최적화 방법 : 이터레이터(Iterator) 직접 구현과 2가지 핵심 프로토콜 차이 및 해결 (0) | 2026.03.13 |
| [PYTHON] 문자열 검색의 99% 해결 방법 : 정규 표현식(Regex) 기초 개념과 일반 검색의 차이 및 3단계 활용법 (0) | 2026.03.13 |
| [PYTHON] 효율적인 메모리 관리를 위한 가비지 컬렉션의 3가지 동작 원리와 최적화 방법 (0) | 2026.03.13 |