디렉토리 트리 출력
사용자가 입력한 디렉터리 아래에 포함된 파일과 디렉터리를 출력하는 함수를 작성해 보겠습니다.
import os
디렉터리와 파일 경로를 다루기 위해 os 모듈을 임포트합니다.
def print_directory_contents(path, level=0):
try:
for entry in os.listdir(path):
full_path = os.path.join(path, entry)
print(' ' * level + '|-- ' + entry)
if os.path.isdir(full_path):
print_directory_contents(full_path, level + 1)
except PermissionError:
print(' ' * level + '|-- ' + 'Permission Denied')
print_directory_contents라는 함수를 정의합니다. 이 함수는 디렉터리 경로 path와 현재 디렉터리의 깊이를 나타내는 level을 입력으로 받습니다.
os.listdir(path)를 사용해 주어진 path 디렉터리의 내용을 목록화합니다. 각 항목 entry에 대해 os.path.join(path, entry)를 사용해 전체 경로를 full_path에 저장합니다. 디렉터리의 깊이에 따라 들여쓰기(' ' * levle)를 조장하고, |-- 기호를 사용해 디렉터 트리 구조를 출력합니다.
os.path.isdir(full_path)를 사용해 full_path가 디렉터리인지 확인합니다. 디렉터리인 경우, 재귀적으로 print_directory_contents 함수를 호출하여 하위 디렉터리를 출력합니다. 이때, level을 1 증가시켜 깊이를 나타냅니다.
디렉터리 내용을 열 수 없는 경우(예: 권한이 없는 경우), PermissionError 예외를 처리합니다. 예외 발생 시 현재 깊이에서 Permission Denied 메시지를 출력합니다.
dir = input('조회할 디렉터리를 입력하세요: ')
print_directory_contents(dir)
사용자로부터 조회할 디렉터리 경로를 입력받아 dir 변수에 저장합니다. print_directory_contents 함수를 호출해 입력받은 디렉터리의 내용을 출력합니다.
전체 소스 코드와 실행 예는 다음과 같습니다.
import os
def print_directory_contents(path, level=0):
try:
for entry in os.listdir(path):
full_path = os.path.join(path, entry)
print(' ' * level + '|-- ' + entry)
if os.path.isdir(full_path):
print_directory_contents(full_path, level + 1)
except PermissionError:
print(' ' * level + '|-- ' + 'Permission Denied')
dir = input('조회할 디렉터리를 입력하세요: ')
print_directory_contents(dir)
조회할 디렉터리를 입력하세요: c:\temp
|-- 2022
|-- HncDownload
|-- HncUtils_2022
|-- HncUtils_2022.cab
|-- R14
|-- Main
|-- HncUpdate
|-- HncUpdate.cab
|-- HncUpdate.cab
|-- PrepareTemp
|-- HncUpdate.cab
|-- AUtempR
사용자가 c:\temp 디렉터리를 입력하면,
- c:\temp 디렉터리의 내용을 목록화하고 출력합니다.
- 각 항목에 대해 디렉터리인지 확인합니다.
- 디렉터리인 경우, 재귀적으로 해당 디렉터리의 내용을 출력합니다
- 권한이 없는 디렉터리인 경우, Permission Denied 메시지를 출력합니다. .
'수업자료' 카테고리의 다른 글
실습 : ORM 기반 블로그 애플리케이션 (0) | 2024.07.29 |
---|---|
실습 : 도서관 관리 시스템 (0) | 2024.07.27 |
실습 : 리스트 모든 요소 합을 반환하는 재귀함수 (0) | 2024.07.27 |
실습 : 문자열을 역순으로 반환하는 재귀함수 (0) | 2024.07.27 |
실습 : 중복 제거 후 정렬 (0) | 2024.07.27 |
댓글