Glob()을 써서 재귀적으로 파일을 찾는 방법?
조회수 10478회
Glob()을 써서 재귀적으로 파일을 찾고 싶습니다.
제가 쓰는 코드는 Glob(os.path.join('src','*.c'))
인데
이 코드는 현재 src
디렉토리에서만 .c
파일을 찾아줍니다.
src
의 하위 디렉토리에서도 .c
파일을 찾으려면 어떻게 해야 하나요?
지금은 임시로 밑의 소스코드같이 쓰고 있지만 파이썬스러운 방법도 아니고 코드가 지저분해 보여서 다른 분들의 도움을 받고 싶습니다.
소스코드
Glob(os.path.join('src','*.c'))
Glob(os.path.join('src','*','*.c'))
Glob(os.path.join('src','*','*','*.c'))
Glob(os.path.join('src','*','*','*','*.c'))
1 답변
-
glob.iglob(pathname, recursive=False) - 파이썬 3.5이상
파이썬 3.5아상에서는 glob 모듈이
"**"
directive 를 지원합니다.따라서 질문하신 경우 다음과 같이 써주면 됩니다.
import glob for filename in glob.iglob('src/**/*.c', recursive=True): print(filename)
프린트가 아니라 list가 필요하신 경우는 위 코드의
glob.iglob
을glob.glob
로 바꿔주세요파이썬 2.2 ~ 3.4
구버전에서는 디렉토리를 재귀적으로 검사할 때 os.walk를, 파일 이름을 검사할 때는 fnmatch.filter를 씁니다.
import fnmatch import os matches = [] for root, dirnames, filenames in os.walk('src'): for filename in fnmatch.filter(filenames, '*.c'): matches.append(os.path.join(root, filename))
파이선 2.1이하
파이썬 2.1 이하에서는 2.2~3.4의 코드에서
fnmatch.filter
를glob.glob
으로 바꿔줘야 합니다.
댓글 입력