# -*- coding:cp949 -*-
# 특정 디렉토리내 모든 파일의 경로를 출력하는 스크립트
import os
root = "특정 디렉토리 경로"
for base, dirs, names in os.walk(root):
for name in names:
print os.path.join(base, name)
그런데 사용하다보면
*.h 만 뽑아낸다던지, .svn 폴더는 제외한다던지 처럼
특정 폴더나 확장자만 얻어내야 할 경우가 자주 있습니다.
예1)
# .svn 디렉토리 제외
for base, dirs, names in os.walk(root):
dirs[:] = [dir for dir in dirs if dir != ".svn"]
...
예2)
# 확장자가 .h 인 파일만 추려내기
for base, dirs, names in os.walk(root):
for name in names:
if os.path.splitext(name)[1].lower() == ".h":
yield os.pah.join(base, name)
1~2줄 정도 추가되는 코드지만 너무 자주 쓰다보니 이렇게 한 두줄 쓰는 것도 귀찮아집니다.
그래서 os_walkf 란 함수를 만들었습니다.
def os_walkf(root, filterDir=None, filterName=None, filterExt=None):
for base, dirs, names in os.walk(root):
if filterDir:
dirs[:] = [dir for dir in dirs if filterDir(dir)]
if filterName:
if filterExt:
for name in names:
if filterName(name) and filterExt(os.path.splitext(name)[1]):
yield os.path.join(base, name)
else:
for name in names:
if filterName(name):
yield os.path.join(base, name)
else:
if filterExt:
for name in names:
if filterExt(os.path.splitext(name)[1]):
yield os.path.join(base, name)
else:
for name in names:
yield os.path.join(base, name)
속도를 위해 과감히 분기처리시켰습니다.
어디서나 사용하기 쉽도록 urlimport 를 지원합니다~
예제1
# .svn 디렉토리 제외
import urlimport_myevan
from os_utils import os_walkf
for path in os_walkf(".", filterDir=lambda dir: dir != ".svn"):
print path
예제2
# .h 파일만 수집
import urlimport_myevan
from os_utils import os_walkf
for path in os_walkf(".", filterExtr=lambda ext: ext.lower() == ".h"):
print path
짜잔~


python 을 좋아하는 게임 프로그래머