Skip to content

Python 디렉터리의 모든 파일 가져오기: 완전하고 효율적인 가이드

Updated on

디렉터리의 파일을 나열하는 작업은 Python에서 가장 자주 사용하는 작업 중 하나입니다. 데이터 정리, 파일 전처리, 작업 자동화 등 다양한 상황에서 필요합니다.

이 업데이트된 가이드에서 다룰 내용은 다음과 같습니다:

  • os.listdir를 사용해 파일 나열하기
  • os.walk로 재귀적으로 파일 나열하기
  • 확장자로 파일 필터링하기
  • 이미지, 비디오 등 특정 파일 타입만 나열하기
  • 최신 방식: 위의 모든 작업을 pathlib으로 처리하는, 오늘날 권장되는 접근법
  • glob 패턴을 효과적으로 사용하는 방법

요약 — 빠른 레시피 모음

작업최선의 방법
파일 나열 (비재귀)os.listdir 또는 pathlib.Path.iterdir()
파일 재귀적으로 나열os.walk 또는 pathlib.Path.rglob()
확장자로 필터링pathlib.Path.rglob("*.csv")
패턴 매칭glob.glob() / pathlib.Path.rglob("*pattern*")
전반적으로 가장 권장되는 방법pathlib

1. os.listdir 사용하기 (기본, 비재귀)

os.listdir 함수는 특정 디렉터리 안의 파일 및 폴더 이름을 반환하지만, 하위 폴더로 들어가지는 않습니다.

import os
 
def list_files(directory):
    return os.listdir(directory)
 
print(list_files("/path/to/your/directory"))

이 방식은 디렉터리 안의 항목을 모두 가져오지만, 별도의 로직 없이 필터링이나 재귀 탐색을 할 수는 없습니다. 최신 Python 코드에서는 다음 섹션의 pathlib 사용을 고려하는 것이 좋지만, 간단한 스크립트에는 여전히 유용합니다.


2. os.walk로 모든 파일 재귀적으로 나열하기

모든 하위 디렉터리를 순회하면서 파일을 나열하려면 다음과 같이 합니다:

import os
 
def list_files_recursively(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            print(os.path.join(root, file))
 
list_files_recursively("/path/to/your/directory")

os.walk는 강력하고 메모리 효율적이라, 큰 디렉터리 트리를 처리할 때 적합합니다.


3. 확장자로 파일 필터링하기

순회 중에 바로 필터링할 수 있습니다:

import os
 
def list_files_by_extension(directory, extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(extension):
                print(os.path.join(root, file))
 
list_files_by_extension("/path/to/your/directory", ".json")

여러 확장자를 사용하려면 (".jpg", ".png")처럼 튜플로 넘기면 됩니다.


4. 이미지 또는 비디오 파일 나열하기

이미지 나열:

import os
 
def list_image_files(directory):
    image_ext = (".jpg", ".jpeg", ".png", ".gif", ".webp")
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith(image_ext):
                print(os.path.join(root, file))
 
list_image_files("/path/to/your/directory")

비디오 나열:

import os
 
def list_video_files(directory):
    video_ext = (".mp4", ".avi", ".mov", ".mkv")
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith(video_ext):
                print(os.path.join(root, file))
 
list_video_files("/path/to/your/directory")

NEW: 최신 방식 — pathlib 사용하기 (권장)

Python 3.4+부터는 경로를 다룰 때 pathlib가 권장되는 방식입니다.
os.path보다 더 읽기 쉽고 강력합니다.

모든 파일 나열 (비재귀):

from pathlib import Path
 
def list_files(directory):
    return [p for p in Path(directory).iterdir() if p.is_file()]
 
print(list_files("/path/to/dir"))

모든 파일 재귀적으로 나열:

from pathlib import Path
 
def list_files_recursive(directory):
    return list(Path(directory).rglob("*"))
 
print(list_files_recursive("/path/to/dir"))

확장자로 필터링:

from pathlib import Path
 
for file in Path("/path/to/dir").rglob("*.json"):
    print(file)

여러 타입 필터링:

from pathlib import Path
 
extensions = ("*.jpg", "*.png", "*.jpeg")
for ext in extensions:
    for file in Path("path/to/dir").rglob(ext):
        print(file)

pathlib를 사용하면 코드가 매우 깔끔해집니다.


5. glob로 패턴 매칭하기

glob는 셸 스타일의 와일드카드 매칭이 필요할 때 유용합니다:

import glob
 
json_files = glob.glob("/path/to/your/directory/**/*.json", recursive=True)
 
print(json_files)

자주 쓰는 패턴 예시:

  • "*.csv"
  • "data_*"
  • "**/*.jpg" (재귀적으로 검색)

결론

이 가이드에서는 Python에서 파일을 나열하는 여러 가지 방법을 살펴보았습니다:

  • 간단한 디렉터리 스캔을 위한 os.listdir
  • 재귀적 탐색을 위한 os.walk
  • 확장자를 이용한 파일 필터링
  • 이미지, 비디오 같은 특정 파일 타입 처리
  • 와일드카드 검색을 위한 glob
  • 그리고 현대적인 권장 방식인 pathlib

데이터 정리, 파일 자동화 스크립트 작성, 머신러닝 워크플로 설계 등 어떤 작업을 하든, 이 기법들을 활용하면 더 깔끔하고 빠르며 유지보수하기 쉬운 Python 코드를 작성할 수 있습니다.


자주 묻는 질문 (FAQ)

Python으로 디렉터리의 모든 파일을 어떻게 나열하나요?

다음처럼 사용할 수 있습니다:

os.listdir(path)

또는 더 현대적인 방식으로는:

Path(path).iterdir()

모든 파일을 재귀적으로 나열하려면 어떻게 하나요?

다음 중 하나를 사용할 수 있습니다:

os.walk(path)

또는:

Path(path).rglob("*")

확장자로 파일을 필터링하려면 어떻게 하나요?

다음과 같이 사용할 수 있습니다:

file.endswith(".json")

또는:

Path(path).rglob("*.json")