파이썬
[python] 특정 디렉토리 내의 파일 또는 파일명 가져오기 (os.listdir/glob)
도도o
2024. 7. 20. 21:19
여러 개의 데이터를 불러와야 할 때, 특정 디렉토리에 데이터 파일의 정보를 불러오고, 경로를 지정하게 된다.
이때, 주로 사용하는 파이썬 파이브러리는 os와 glob가 있다.
두 방법 사이에 약간의 차이가 있다.
1) os.list_dir
os의 list_dir를 이용하면 해당 경로의 모든 하위 디렉토리 및 파일 가져오게 된다.
파일의 경우 확장자에 상관 없이 모두 불러오게 되고, 리스트 형태로 반환한다.
import os
target_dir = "./public_dataset"
# target_dir = "./public_dataset/"
files = os.listdir(target_dir)
print(files)
리스트로 가져오면 다음과 같이 반복문이나 조건문을 이용하여 지정한 경로의 파일을 처리할 수 있다.
for file in files:
if file in files:
하지만 하위 디렉토리도 가져오기 때문에, 해당 경로 아래에 어떤 파일과 디렉토리가 있는지 확인하고 사용해야 한다.
특정 확장자를 가진 파일의 목록을 찾으려면 ₩.endswith₩ 을 사용한다.
import os
target_dir = "./public_dataset"
files = os.listdir(target_dir)
files_webm = [file for file in files if file.endswith(".webm")]
print(files_webm)
2) glob.glob
glob를 이용해서도 하위 디렉토리와 파일 목록을 불러올 수 있으며, 리스트 형태로 반환한다.
import glob
target_dir = "./public_dataset/*"
files = glob.glob(target_dir)
print(files)
대신, glob의 경우에는 경로 마지막에 "/*" 를 붙여줘야 한다.
디렉토리명만 입력할 경우, 원하는 파일들을 출력할 수 없다.
또한, 출력값에 지정한 경로를 포함하게 된다.
출력 예시
['./public_dataset/00000.webm', './public_dataset/00001.webm', ...]
특정 확장자를 가진 파일의 목록을 찾기 위해 condition을 지정할 수 있다.
import glob
condition = "./public_dataset/*.webm"
files_webm = glob.glob(condition)
print(files_webm)
특정 단어를 포함한 파일을 가져오기 위해 조건을 다음과 같이 지정할 수도 있다.
import glob
condition = "./public_dataset/*123*.*"
files_webm = glob.glob(condition)
print(files_webm)
파일명에 '123' 을 포함한 모든 파일에 대한 정보를 반환한다.
참고한 자료:
https://itholic.github.io/python-listdir-glob/