메뉴 닫기

파이썬 파일입출력 경로 관리 pathlib Path 사용법과 read_text write_text 활용

파이썬 파일입출력 경로 관리 pathlib Path 사용법과 read_text write_text 활용

📝 초보자도 쉽게 배우는 파이썬 pathlib Path 기본 문법과 파일 읽기 쓰기 방법

코딩을 하다 보면 파일을 읽거나 저장해야 할 일이 꼭 생깁니다.
특히 파이썬에서는 전통적인 os 모듈 대신, 훨씬 직관적이고 현대적인 방법으로 파일 경로를 다룰 수 있는 pathlib.Path가 많이 활용되고 있습니다.
복잡한 경로 문자열을 직접 붙이거나 처리하는 대신 객체지향적인 방식으로 다루기 때문에 코드가 훨씬 깔끔하고 가독성도 좋아집니다.
이 글에서는 pathlib.Path의 기본 사용법과 함께, 가장 많이 쓰이는 read_text, write_text 메서드까지 자세히 살펴보겠습니다.

파일 입출력은 프로그램의 핵심 기능 중 하나로, 데이터를 저장하고 불러오는 과정에서 필수적으로 사용됩니다.
단순히 문법만 아는 것에서 끝나지 않고, 실제 프로젝트에서도 활용할 수 있도록 다양한 예시를 통해 이해를 도와드리겠습니다.
또한, 파일 경로를 다룰 때 초보자들이 자주 하는 실수와 그 해결 방법도 함께 알려드리니 끝까지 읽어보시면 많은 도움이 될 것입니다.



📂 pathlib Path란 무엇인가?

파이썬에서 파일이나 디렉터리의 경로를 다룰 때 전통적으로 os.path 모듈을 많이 사용해왔습니다.
하지만 문자열 중심으로 경로를 처리하다 보니 코드가 지저분해지고, 플랫폼(윈도우, 리눅스, 맥)마다 경로 구분자가 달라 에러가 발생하는 경우가 많았습니다.
이런 문제를 해결하기 위해 도입된 것이 pathlib 모듈입니다.

pathlib.Path는 경로를 단순한 문자열이 아닌 객체로 다루기 때문에, 직관적이고 일관된 방식으로 파일 시스템을 제어할 수 있습니다.
예를 들어, 단순히 경로를 합치고 싶을 때 / 연산자를 사용할 수 있어 코드가 훨씬 간결해집니다.

CODE BLOCK
from pathlib import Path

# 현재 작업 디렉토리 확인
p = Path.cwd()
print(p)

# 하위 경로 결합
file_path = p / "data" / "example.txt"
print(file_path)

위 예시처럼 Path.cwd()는 현재 작업 디렉토리를 알려주고, 경로를 합칠 때 / 연산자를 활용하면 운영체제에 맞는 올바른 경로가 자동으로 생성됩니다.
따라서 복잡한 os.path.join()을 사용할 필요가 없죠.

💡 TIP: pathlib은 파이썬 3.4부터 도입되었으며, 현재는 표준으로 자리 잡아 다양한 프로젝트에서 널리 사용되고 있습니다.

즉, pathlib.Path는 단순히 파일을 열고 닫는 도구가 아니라, 경로를 안전하게 다루고 유지보수를 쉽게 해주는 강력한 라이브러리라고 할 수 있습니다.

🛠️ pathlib Path 기본 사용법

pathlib 모듈의 가장 큰 장점은 객체지향적으로 경로를 다룰 수 있다는 점입니다.
즉, 경로 자체가 메서드와 속성을 가진 객체이므로 직관적인 코드 작성이 가능합니다.
아래에서는 가장 자주 쓰이는 기본 사용법을 살펴보겠습니다.

📌 현재 작업 디렉토리와 홈 디렉토리

CODE BLOCK
from pathlib import Path

# 현재 작업 디렉토리
print(Path.cwd())

# 사용자 홈 디렉토리
print(Path.home())

Path.cwd()는 현재 실행 중인 디렉토리를 알려주고, Path.home()은 운영체제에 따라 달라지는 사용자 홈 경로를 반환합니다.

📌 경로 결합과 탐색

CODE BLOCK
p = Path("project") / "data" / "input.txt"
print(p)

# 부모 디렉토리
print(p.parent)

# 파일 이름
print(p.name)

# 확장자
print(p.suffix)

슬래시(/) 연산자를 사용하면 경로를 손쉽게 결합할 수 있습니다.
또한 parent, name, suffix 속성을 이용하면 디렉토리 구조 탐색과 파일 정보를 간단하게 확인할 수 있습니다.

📌 경로 존재 여부 확인

CODE BLOCK
file = Path("example.txt")

print(file.exists())   # 파일 존재 여부
print(file.is_file())  # 파일인지 확인
print(file.is_dir())   # 디렉토리인지 확인

이러한 메서드를 활용하면 파일을 열기 전에 안전하게 존재 여부를 검사할 수 있습니다.
이는 파일 입출력에서 발생하는 예외를 예방하는 데 큰 도움이 됩니다.

⚠️ 주의: 경로가 존재한다고 해서 항상 접근 가능한 것은 아닙니다.
권한 문제가 발생할 수 있으니 운영체제의 권한 설정도 함께 고려해야 합니다.



✍️ 파일 읽기 read_text 활용

pathlib의 read_text() 메서드는 파일을 간단하게 읽어오는 방법을 제공합니다.
기존에 open() 함수와 read()를 이용해 파일을 열고 닫는 과정을 직접 처리해야 했던 방식과 달리, 단 한 줄로 텍스트를 불러올 수 있습니다.

CODE BLOCK
from pathlib import Path

file_path = Path("sample.txt")

# 파일 내용 읽기
content = file_path.read_text(encoding="utf-8")
print(content)

위 예제에서 encoding=”utf-8″을 지정하면 한글이 포함된 파일도 깨지지 않고 정상적으로 읽을 수 있습니다.
이처럼 read_text()는 코드의 가독성을 높이고, 에러 발생 가능성을 줄여줍니다.

📌 줄 단위로 파일 읽기

만약 파일을 한 줄씩 읽고 싶다면 splitlines() 메서드를 함께 사용하면 편리합니다.

CODE BLOCK
lines = file_path.read_text(encoding="utf-8").splitlines()
for line in lines:
    print(line)

이 방법을 사용하면 긴 파일을 효율적으로 다룰 수 있으며, 데이터 처리 시 특정 줄만 선택적으로 가공하기도 쉽습니다.

💎 핵심 포인트:
read_text()는 파일 크기가 크지 않은 경우에 유용합니다. 수백 MB 이상의 대용량 파일을 처리할 때는 메모리 부담이 될 수 있으므로, open()을 이용한 스트리밍 방식이 더 적합합니다.

📑 파일 쓰기 write_text 활용

파일에 텍스트를 저장할 때는 write_text() 메서드를 사용할 수 있습니다.
이 메서드는 별도의 open() 함수 호출 없이 문자열을 바로 파일에 기록할 수 있도록 해주기 때문에 매우 간편합니다.
기본적으로 기존 파일이 존재하면 내용을 덮어쓰며, 새 파일이라면 자동으로 생성합니다.

CODE BLOCK
from pathlib import Path

file_path = Path("output.txt")

# 파일에 문자열 쓰기
file_path.write_text("Hello, Python!", encoding="utf-8")

위 코드를 실행하면 output.txt 파일이 생성되고, 그 안에 문자열이 저장됩니다.
이처럼 간단히 한 줄로 처리할 수 있어, 로그 저장이나 간단한 결과 파일 작성에 특히 유용합니다.

📌 기존 내용에 덧붙이기

기본적인 write_text()는 항상 덮어쓰기 모드로 작동합니다.
만약 기존 내용 뒤에 새로운 텍스트를 추가하고 싶다면 open()write()를 사용해야 합니다.

CODE BLOCK
with file_path.open("a", encoding="utf-8") as f:
    f.write("\n추가된 텍스트입니다.")

위 예제처럼 "a" 모드를 지정하면 파일 끝에 새로운 내용을 이어서 쓸 수 있습니다.
즉, 단순한 기록은 write_text()로, 누적 저장이 필요한 경우는 open() 방식을 쓰는 것이 적합합니다.

💡 TIP: write_text()는 주로 설정 파일, 로그, 캐시 저장 등에 유용하게 활용됩니다.
데이터가 많거나 이진 파일(binary file)을 다루는 경우에는 write_bytes() 또는 open() 함수를 사용하는 것이 더 알맞습니다.



pathlib Path와 os 모듈 비교

파이썬에서 파일 경로를 다루는 방법은 크게 두 가지가 있습니다.
전통적인 os.path 모듈과 객체 지향적 접근을 제공하는 pathlib입니다.
두 방식은 동일한 작업을 수행할 수 있지만, 코드의 가독성과 유지보수 측면에서 차이가 큽니다.

📌 os.path 방식

CODE BLOCK
import os

path = os.path.join("project", "data", "example.txt")
print(path)

print(os.path.dirname(path))  # 부모 디렉토리
print(os.path.basename(path)) # 파일 이름
print(os.path.splitext(path)) # 확장자 분리

os.path는 문자열 기반으로 동작하기 때문에 함수 호출이 반복되고 코드가 길어지는 단점이 있습니다.
특히 경로를 다루는 연산이 많아질수록 가독성이 떨어집니다.

📌 pathlib 방식

CODE BLOCK
from pathlib import Path

p = Path("project") / "data" / "example.txt"

print(p.parent)  # 부모 디렉토리
print(p.name)    # 파일 이름
print(p.suffix)  # 확장자

pathlib은 경로를 객체로 다루기 때문에 직관적이고 읽기 쉬운 코드 작성이 가능합니다.
또한 / 연산자를 사용한 경로 결합은 os.path.join()보다 훨씬 간결합니다.

비교 항목 os.path pathlib
코드 스타일 함수 기반 (문자열 처리) 객체 기반 (메서드와 속성 활용)
가독성 낮음, 복잡 높음, 직관적
지원 기능 기본 경로 처리 경로 처리 + 파일 읽기/쓰기 메서드 제공

💎 핵심 포인트:
신규 프로젝트에서는 가급적 pathlib을 사용하는 것이 좋습니다. 코드 유지보수와 협업 효율성이 높아지고, Python 공식 문서에서도 pathlib 사용을 권장하고 있습니다.

자주 묻는 질문 (FAQ)

pathlib과 os.path 중 무엇을 사용해야 하나요?
새로운 프로젝트에서는 pathlib을 사용하는 것이 권장됩니다. 코드가 더 직관적이고 유지보수가 쉽기 때문입니다. 다만, 기존 코드와의 호환성이 필요하다면 os.path를 함께 쓸 수도 있습니다.
read_text로 큰 파일도 읽을 수 있나요?
가능은 하지만 권장되지 않습니다. read_text는 파일 전체를 메모리에 불러오기 때문에 수백 MB 이상의 대용량 파일은 open()을 이용한 스트리밍 방식이 더 효율적입니다.
write_text는 항상 덮어쓰기만 가능한가요?
네, 기본적으로 write_text는 기존 내용을 덮어씁니다. 기존 내용에 추가하려면 open(“a”) 모드를 사용하여 write() 메서드로 작성해야 합니다.
pathlib에서 이진 파일도 다룰 수 있나요?
네, 가능합니다. read_bytes()와 write_bytes() 메서드를 이용하면 이미지나 실행 파일 같은 이진 데이터를 읽고 쓸 수 있습니다.
Path 객체로 디렉토리 생성도 가능한가요?
네, 가능합니다. mkdir() 메서드를 사용하면 디렉토리를 만들 수 있으며, parents=True 옵션을 주면 상위 폴더까지 자동 생성됩니다.
운영체제마다 경로 구분자가 달라도 Path가 해결해 주나요?
네, Path는 내부적으로 운영체제에 맞는 경로 구분자를 자동으로 처리합니다. 따라서 코드가 윈도우, 리눅스, 맥OS 어디서든 동일하게 동작합니다.
파일이 없을 때 read_text를 실행하면 어떻게 되나요?
존재하지 않는 파일을 read_text로 읽으려 하면 FileNotFoundError가 발생합니다. 이를 방지하려면 exists() 메서드로 먼저 확인하는 습관이 필요합니다.
pathlib으로 절대 경로와 상대 경로를 모두 다룰 수 있나요?
네, 가능합니다. Path(“파일명”)은 상대 경로를, Path(“/절대/경로”)는 절대 경로를 표현합니다. 또한 resolve() 메서드를 사용하면 항상 절대 경로로 변환할 수 있습니다.

🗂️ 파이썬 pathlib Path로 파일 입출력 쉽게 다루기

pathlib은 파일 경로를 객체 지향적으로 관리할 수 있는 강력한 도구입니다.
os.path와 달리 직관적인 문법을 제공하며, 경로 처리와 더불어 read_text(), write_text() 같은 메서드로 파일 읽기와 쓰기를 간단히 수행할 수 있습니다.
이번 글에서 다룬 내용을 정리하면 다음과 같습니다.

  • 📂pathlib은 경로를 문자열이 아닌 객체로 다루어 코드 가독성을 높인다
  • 🛠️Path.cwd(), Path.home() 등을 이용해 현재 작업 디렉토리와 홈 디렉토리를 쉽게 확인할 수 있다
  • ✍️read_text()는 파일 전체를 간단하게 읽어오며, splitlines()로 줄 단위 처리도 가능하다
  • 📑write_text()는 텍스트 파일을 손쉽게 생성하거나 덮어쓰기에 적합하다
  • os.path와 비교했을 때 pathlib은 더 직관적이고, Python 공식 문서에서도 권장되는 방식이다

이제 여러분은 pathlib.Path를 통해 더 깔끔하고 안전하게 파일을 다룰 수 있습니다.
앞으로 파일 입출력을 구현할 때는 os.path보다 pathlib을 우선적으로 고려해 보시길 추천드립니다.


🏷️ 관련 태그 : 파이썬파일입출력, pathlib, 파이썬기초, 파이썬파일처리, read_text, write_text, 파이썬공부, os모듈비교, 프로그래밍팁, 파이썬강좌