오늘은 파이썬을 이용하여 디렉토리 하위 검색하는 방법을 알아보려고 합니다.
먼저 디렉토리 하위의 목록을 가져오는 작업입니다.
검색 디렉토리 대상은 /app 라고 해볼께요.
import os def search(dir): files = os.listdir(dir) for file in files: print(file) search("/app")
위 프로그램은 디렉토리 하위의 파일명을 보여줍니다.
하지만 절대 경로는 아니고 상대 경로죠. 상위 디렉토리(parent)까지 포함하여 보여주도록 수정할께요.
import os def search(dir): files = os.listdir(dir) for file in files: fullFilename = os.path.join(dir, file) print(fullFilename) search("/app")
그런데 디렉토리 하위에 또 디렉토리가 있다면?
디렉토리 이름만 보여주고 끝낼 것이 아니라 다시 그 디렉토리 내부도 뒤졌으면 합니다.
import os def search(dir): files = os.listdir(dir) for file in files: fullFilename = os.path.join(dir, file) if os.path.isdir(fullFilename): search(fullFilename) else: print(fullFilename) search("/app")
지금은 검색하려는 디렉토리가 하드코드 되어 있습니다만..
이걸 커맨드 아규먼트로 입력받도록 수정하겠습니다.
(추가로 sys를 import 해야 합니다)
import os import sys def search(dir): files = os.listdir(dir) for file in files: fullFilename = os.path.join(dir, file) if os.path.isdir(fullFilename): search(fullFilename) else: print(fullFilename) searchDir = sys.argv[1] search(searchDir)
그런데 만약에 권한이 없는 디렉토리를 뒤지려고 한다면?
Traceback (most recent call last): File "searchDir.py", line 14, in search(searchDir) File "searchDir.py", line 5, in search files = os.listdir(dir) PermissionError: [Errno 13] Permission denied: '/root'
위와 같은 에러가 날거구요.
다음과 같이 예외처리를 해보죠.
import os import sys def search(dir): try: files = os.listdir(dir) for file in files: fullFilename = os.path.join(dir, file) if os.path.isdir(fullFilename): search(fullFilename) else: print(fullFilename) except PermissionError: pass searchDir = sys.argv[1] search(searchDir)