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")