특정 드라이브의 하위 폴드를 탐색하여 생성(수정)일자 기준으로 작성된 파일을 찾는 소스입니다.
특정일 기준으로 백업용 솔루션 만들때 테스트로 작성한 소스입니다.
이 코드에서는 특정 디렉터리 및 하위 디렉터리에서 파일을 탐색하며 조건에 따라 파일 정보를 출력합니다. 코드의 주요 기능과 흐름을 분석하겠습니다.
### 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. 요약
- 코드의 전체 기능은 주어진 디렉터리(혹은 드라이브)를 탐색하면서 파일 경로, 확장자, 수정 날짜 등을 기반으로 특정 조건에 맞는 파일을 출력하는 것입니다.
- 탐색 중 재귀 호출 및 권한 오류 예외 처리를 통해 모든 폴더를 깊게 탐색할 수 있도록 설계되어 있습니다.
이와 같은 코드는 파일 관리 도구, 로그 검색 도구 등을 만들 때 유용하게 활용될 수 있습니다.
'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 |