-
특정 디렉터리 및 하위 디렉터리에서 파일을 탐색하며 조건에 따라 파일 정보를 출력PYTHON(파이썬)/파이썬 활용 2024. 11. 14. 06:21728x90반응형
특정 드라이브의 하위 폴드를 탐색하여 생성(수정)일자 기준으로 작성된 파일을 찾는 소스입니다.
특정일 기준으로 백업용 솔루션 만들때 테스트로 작성한 소스입니다.
import osfrom datetime import datetime
#하위def search(dirname):filenames = os.listdir(dirname)for filename in filenames:full_filename = os.path.join(dirname, filename)print(full_filename)
#Full-> .pydef search2(dirname):try:filenames = os.listdir(dirname)for filename in filenames:full_filename = os.path.join(dirname, filename)if os.path.isdir(full_filename):search2(full_filename)else:ext = os.path.splitext(full_filename)[-1]if ext == '.py':print(full_filename)except PermissionError:pass
#search2("c:/")#search("c:/data")
# Fullfor (path, dir, files) in os.walk("e:/"):for filename in files:sdate = datetime.fromtimestamp(os.path.getmtime(path + str("/")+ filename)).strftime('%Y-%m-%d')stime = datetime.fromtimestamp(os.path.getmtime(path + str("/")+ filename)).strftime('%H:%M:%S')ext = os.path.splitext(filename)[-1]#if ext == '.exe':# print("%s/%s" % (path, filename))if sdate == '2023-08-08':print(sdate, stime)print(path + str("/")+ filename)이 코드에서는 특정 디렉터리 및 하위 디렉터리에서 파일을 탐색하며 조건에 따라 파일 정보를 출력합니다. 코드의 주요 기능과 흐름을 분석하겠습니다.
### 1. 주요 함수 설명
#### `search(dirname)`
- 주어진 디렉터리 (`dirname`) 내의 파일과 폴더를 나열합니다.
- `os.listdir(dirname)`를 사용하여 디렉터리 안의 모든 파일 및 폴더의 이름을 가져옵니다.
- 각 파일 및 폴더의 경로를 `os.path.join(dirname, filename)`를 사용하여 출력합니다.
- 하위 디렉터리로는 재귀적으로 들어가지 않고, 입력한 디렉터리 바로 아래만 탐색하는 간단한 함수입니다.
#### `search2(dirname)`
- 주어진 디렉터리 (`dirname`) 내 모든 파일을 재귀적으로 탐색하며 `.py` 파일을 출력하는 함수입니다.
- `os.listdir()`로 파일과 폴더를 나열하고, `os.path.isdir(full_filename)`을 사용해 해당 경로가 디렉터리인지 확인합니다.
- 만약 디렉터리라면 재귀 호출을 통해 하위 디렉터리를 탐색합니다.
- 파일일 경우 확장자를 `.py`와 비교하고, 맞다면 파일 경로를 출력합니다.
- `PermissionError` 예외처리를 사용하여 접근 권한이 없는 디렉터리 접근 시 프로그램이 멈추는 것을 방지합니다.
### 2. `os.walk()`을 사용한 전체 디렉터리 탐색
- `os.walk("e:/")`를 사용하여 특정 드라이브(`e:/`) 내 모든 파일 및 디렉터리를 탐색합니다.
- `os.walk()`는 주어진 경로 내의 모든 폴더를 순회하며, `path`, `dir`, `files` 정보를 제공합니다.
- `path`: 현재 탐색 중인 폴더의 경로
- `dir`: 현재 폴더 내의 서브 디렉터리들
- `files`: 현재 폴더 내의 파일들
- 각 파일에 대해:
- 파일의 수정 날짜와 시간을 `datetime.fromtimestamp()`를 사용해 가져옵니다.
- `os.path.getmtime()`를 사용해 파일의 수정 시간을 Unix 타임스탬프로 가져온 뒤, 이를 `datetime` 형식으로 변환합니다.
- 날짜는 `%Y-%m-%d`, 시간은 `%H:%M:%S` 형식으로 변환합니다.
- 파일의 확장자를 `os.path.splitext()`로 가져옵니다.
- 특정 조건에 따라 (`sdate == '2023-08-08'`) 파일의 경로와 수정 시간을 출력합니다.
### 3. 코드의 기능 흐름
- 코드의 마지막 부분에서 전체 파일 탐색을 위한 루프가 있습니다.
- `os.walk("e:/")`를 사용하여 `e:/` 드라이브의 모든 디렉터리를 탐색하며 파일 목록을 처리합니다.
- 각 파일에 대해 수정 날짜가 '2023-08-08'인 경우 해당 파일의 날짜, 시간, 그리고 경로를 출력합니다.
### 4. 코드의 용도와 활용
- 이 코드는 파일 탐색 및 조건에 따라 특정 파일을 필터링하는 기능을 수행합니다.
- 각 파일의 수정 날짜를 확인하고 특정 날짜와 일치하는 파일을 출력하는데, 이 기능은 특정 날짜에 수정된 파일을 찾는 데 유용합니다.
- `.py` 확장자를 탐색하는 `search2()`는 Python 스크립트 파일을 찾을 때 사용합니다.
- 코드는 기본적으로 디렉터리 내의 모든 파일을 재귀적으로 순회하며 특정 조건을 만족하는 파일을 찾고 그 경로를 출력하는 구조입니다.
### 5. 개선점 및 주의사항
- 현재 코드는 모든 드라이브나 디렉터리를 탐색하고자 할 때 시간이 오래 걸릴 수 있습니다. 특히 `os.walk("e:/")`는 매우 많은 파일과 폴더를 순회하게 되므로 속도 문제를 야기할 수 있습니다.
- 접근 권한 문제로 `PermissionError`가 발생할 수 있는 디렉터리가 많다면 예외 처리가 많이 발생하게 되어 성능이 저하될 가능성이 있습니다.
- 코드의 안정성과 실행 시간을 고려하여, 큰 디렉터리를 탐색하는 경우에는 예외 처리가 필요하거나 특정 하위 디렉터리를 제외할 수 있는 로직이 필요합니다.
### 6. 요약
- 코드의 전체 기능은 주어진 디렉터리(혹은 드라이브)를 탐색하면서 파일 경로, 확장자, 수정 날짜 등을 기반으로 특정 조건에 맞는 파일을 출력하는 것입니다.
- 탐색 중 재귀 호출 및 권한 오류 예외 처리를 통해 모든 폴더를 깊게 탐색할 수 있도록 설계되어 있습니다.
이와 같은 코드는 파일 관리 도구, 로그 검색 도구 등을 만들 때 유용하게 활용될 수 있습니다.728x90'PYTHON(파이썬) > 파이썬 활용' 카테고리의 다른 글
파이썬으로 간단하게 구현한 QR 코드 생성 및 디코딩 (33) 2024.11.21 특정 디렉터리에서 변경된 파일을 나스(NAS)에 FTP 프로토콜을 통해 복사(업로드)하는 프로그램 (1) 2024.11.15 OpenCV와 Tesseract OCR을 사용하여 카메라로부터 입력된 영상에서 숫자를 탐지하고 인식하는 Python 프로그램 (17) 2024.11.14 첨부파일을 포함한 e-mail 보내기 (17) 2024.11.14 python으로 간단하게 e-mail 보내기 (2) 2024.11.13