Appia의 IT세상

파이썬 파일·디렉터리 유무 확인 방법: os.path vs pathlib, 예외 처리까지 본문

Python/Python 응용

파이썬 파일·디렉터리 유무 확인 방법: os.path vs pathlib, 예외 처리까지

Appia 2019. 12. 30. 07:36
반응형

파이썬 파일·디렉터리 유무 확인 방법: os.path vs pathlib, 예외 처리까지

파이썬 파일·디렉터리 유무 확인 방법: os.path vs pathlib, 예외 처리까지

 

최종 업데이트: 2026-01-06

파이썬에서 파일/디렉터리 존재 여부를 확인하는 방법을 pathlib 중심으로 정리하겠습니다. exists/is_file/is_dir 차이, 권한/심볼릭 링크/레이스 컨디션, 안전한 try/except 패턴까지 예제로 설명합니다.

TL;DR

  • 파일/폴더 존재 확인: Path(path).exists()
  • 파일인지 확인: Path(path).is_file()
  • 폴더인지 확인: Path(path).is_dir()
  • “확인 후 열기” 대신 가능하면 try: open(...) 패턴이 더 안전

이번 포스팅은 실제 특정 파일이 존재 유무를 확인하는 기능 및 방법을 다루도록 하겠습니다. 저의 경우에 설정 파일 및 파일 불러오기를 할때에, 디렉터리 및 파일 유무에 대해서 확인을 하고 진행을 합니다. 만약 해당 파일이 없을 경우에 기본값으로 생성하고 읽어오게 하는 경우가 매우 흔합니다. 해당해서 관련된 방법에 대해서 살펴보도록 하겠습니다. 

※ 이 글은 2026년 1월 기준으로 내용이 보완 및 업데이트되었습니다.

 

pathlib(Path)로 확인하기

os.path도 여전히 많이 사용되고 있습니다. 하지만, 최근에는 pathlib.Path를 많이 사용되고 있습니다. 아마도, 가독성과 확장성 측면에서 사람들의 선호도를 끌어낸 것이라고 생각합니다. 그러면 간단한 예제를 살펴보겠습니다. 

from pathlib import Path

p_file = Path("config.json")
p_dir = Path("logs")

print(p_file.exists())   # 파일/폴더 상관없이 존재하면 True
print(p_file.is_file())  # "파일"이면 True
print(p_dir.is_dir())    # "디렉터리"이면 True

 

 

exists / is_file / is_dir 차이

  • exists() : 경로가 존재하면 True (파일이든 디렉토리든 상관 없음)
  • is_file() : 해당 경로가 존재하고, 그게 “파일”이면 True
  • is_dir() : 해당 경로가 존재하고, 그게 “디렉터리(폴더)”면 True

 

os.path로도 동일하게 가능

앞선 단계에서는 pathlib을 활용했다면, 이번에는 고전 방법인 os.path 방식을 활용해보겠습니다. 

import os

print(os.path.exists("config.json"))
print(os.path.isfile("config.json"))
print(os.path.isdir("logs"))

 

 

os.path.exists / isfile / isdir 차이

  • os.path.exists(path) : 경로가 존재하면 True (파일이든 디렉토리든 상관 없음)
  • os.path.isfile(path) : 해당 경로가 존재하고, 그게 “파일”이면 True
  • os.path.isdir(path) : 해당 경로가 존재하고, 그게 “디렉터리(폴더)”면 True

 

 

실전활용: try/except 활용 

보통 아래 예시와 같이 조건문으로 해당 파일 여부를 확인하고 파일을 읽는 형태로 합니다. 

from pathlib import Path

p = Path("config.json")
if p.exists():
    data = p.read_text(encoding="utf-8")

 

물론 이 부분이 틀리지는 않았지만, 존재 확인 직후 파일 읽는 과정 사이에서 파일이 지워지거나 권한이 바뀌면 예외가 발생할 수 있습니다. 이 부분을 방지하기 위해서 try/except 방식을 활용합니다. 

from pathlib import Path

p = Path("config.json")

try:
    data = p.read_text(encoding="utf-8")
except FileNotFoundError:
    data = "{}"  # 없으면 기본값
except PermissionError:
    raise RuntimeError("config.json을 읽을 권한이 없습니다.")

 

추가로 자주 사용하는 방식을 하나 소개해 드릴까 합니다. 파일 확인 후, 없으면 생성하는 형태입니다. 

from pathlib import Path
import json

config_path = Path("config.json")

default_config = {
    "ID": "APPIA",
    "password": "APPIA1"
}

if not config_path.exists():
    config_path.write_text(json.dumps(default_config, ensure_ascii=False, indent=2), encoding="utf-8")

config = json.loads(config_path.read_text(encoding="utf-8"))
print(config)

 

반드시 확인 및 주의 사항

Path("config.json").exists() == True 라고 해서 그게 파일이라는 보장은 없습니다. 폴더(디렉터리)여도 exists()는 True가 됩니다. 그래서 “파일을 읽거나 열어야 하는 상황”이면 is_file()로 확인하는 게 안전합니다.

config.json이 폴더일 경우

 

이번 포스팅에서는 pathlib을 바탕으로 파일/폴더가 존재하는 지 확인하는 방법에 대해서 살펴봤습니다. 간단히 실전에서 사용할 수 있는 간단한 예시도 함께 다루어봤습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 

 

 

파이썬[Python] 리스트(List) 역순으로 만들기, 뒤집기 (reversed / reverse / 슬라이싱 비교)

파이썬[Python] 리스트(List) 역순으로 만들기,뒤집기(reversed / reverse / 슬라이싱 비교) 파이썬에서 list를 역순으로 다루는 방법은 생각보다 다양합니다. 경우에 따라서는 단순히 뒤에서부터 값을 읽

appia.tistory.com

 

 

파이썬 리스트 비교 6가지 방법: 순서/중복/교집합/차집합/인덱스 비교

파이썬 리스트 비교 6가지 방법: 순서/중복/교집합/차집합/인덱스 비교 이번 포스팅에서는 파이썬에서 자주 사용하는 리스트를 비교하는 방법을 정리해보겠습니다. 리스트 비교는 단순히 값만

appia.tistory.com

 

 

반응형
Comments