본문 바로가기
수업자료

실습 : 디렉토리 트리 출력

by ^..^v 2024. 7. 27.
728x90
반응형

디렉토리 트리 출력 

사용자가 입력한 디렉터리 아래에 포함된 파일과 디렉터리를 출력하는 함수를 작성해 보겠습니다. 

 

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 디렉터리를 입력하면, 

  1. c:\temp 디렉터리의 내용을 목록화하고 출력합니다. 
  2. 각 항목에 대해 디렉터리인지 확인합니다. 
  3. 디렉터리인 경우, 재귀적으로 해당 디렉터리의 내용을 출력합니다
  4. 권한이 없는 디렉터리인 경우, Permission Denied 메시지를 출력합니다. .
728x90
반응형

댓글