파이썬에서 디렉토리 트리 목록 출력하기
os 모듈 사용:
- os.listdir() 함수: 특정 디렉토리에 있는 모든 파일과 하위 디렉토리의 이름을 리스트로 반환합니다.
- os.walk() 함수: 디렉토리 트리를 반복적으로 탐색하여 각 디렉토리, 하위 디렉토리, 파일의 이름을 반환합니다.
예제:
import os
def list_dir_tree(dir_path):
for root, dirs, files in os.walk(dir_path):
print(f"[DIR] {root}")
for file in files:
print(f"[FILE] {os.path.join(root, file)}")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
pathlib 모듈 사용:
- 파이썬 3.4 이상에서 사용 가능한 표준 모듈입니다.
- 객체 지향 방식으로 디렉토리 트리를 조작하는 데 유용합니다.
from pathlib import Path
def list_dir_tree(dir_path):
dir_path = Path(dir_path)
for child in dir_path.iterdir():
if child.is_dir():
print(f"[DIR] {child}")
list_dir_tree(child)
else:
print(f"[FILE] {child}")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
tree 라이브러리 사용:
- pip를 사용하여 설치할 수 있는 타사 라이브러리입니다.
- 명령줄 인터페이스를 통해 트리 구조를 깔끔하게 출력합니다.
pip install tree
tree /path/to/directory
주의 사항:
- 루트 디렉토리 경로를 정확하게 지정해야 합니다.
- 하위 디렉토리와 파일 이름을 구분하여 출력합니다.
- 출력 형식을 원하는 대로 변경할 수 있습니다.
예제 코드: 디렉토리 트리 목록 출력
os 모듈 사용
import os
def list_dir_tree(dir_path):
for root, dirs, files in os.walk(dir_path):
indent = " " * len(root.split("/"))
print(f"{indent}[DIR] {root}")
for file in files:
print(f"{indent}[FILE] {os.path.join(root, file)}")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
설명:
os.walk()
함수를 사용하여 디렉토리 트리를 반복적으로 탐색합니다.- 각 디렉토리마다 들여쓰기를 추가하여 트리 구조를 명확하게 표시합니다.
- 파일 이름은
[FILE]
태그와 함께 출력합니다.
pathlib 모듈 사용
from pathlib import Path
def list_dir_tree(dir_path):
dir_path = Path(dir_path)
for child in dir_path.iterdir():
indent = " " * child.depth()
print(f"{indent}[DIR] {child}")
if child.is_dir():
list_dir_tree(child)
else:
print(f"{indent}[FILE] {child}")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
Path()
클래스를 사용하여 디렉토리 경로를 객체로 표현합니다.iterdir()
메서드를 사용하여 하위 디렉토리와 파일을 반복합니다.depth()
속성을 사용하여 현재 디렉토리의 깊이를 계산하고 들여쓰기를 조정합니다.
tree 라이브러리 사용
pip install tree
tree /path/to/directory
tree
라이브러리를 설치합니다.- 명령줄에서
tree
명령어와 함께 디렉토리 경로를 입력하면 트리 구조를 출력합니다. tree
명령어 옵션을 사용하여 출력 형식을 다양하게 변경할 수 있습니다.
- 출력 형식을 원하는 대로 변경하려면 코드를 수정하거나
tree
라이브러리 옵션을 사용해야 합니다. - 디렉토리 경로, 파일 이름, 출력 형식 등을 자유롭게 변경하여 원하는 결과를 얻도록 조정하세요.
디렉토리 트리 목록 출력: 대체 방법
glob 모듈 사용
- 특정 패턴에 일치하는 파일과 디렉토리를 찾는 데 유용한 모듈입니다.
glob.glob()
함수를 사용하여 디렉토리 트리를 재귀적으로 탐색할 수 있습니다.
import glob
def list_dir_tree(dir_path):
pattern = dir_path + "**/*"
for path in glob.glob(pattern):
if os.path.isdir(path):
print(f"[DIR] {path}")
else:
print(f"[FILE] {path}")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
glob.glob()
함수는 특정 패턴에 일치하는 모든 경로를 리스트로 반환합니다.os.path.isdir()
함수를 사용하여 디렉토리인지 파일인지 확인합니다.
shutil 모듈 사용
- 파일 및 디렉토리 작업을 위한 유용한 모듈입니다.
shutil.disk_usage()
함수를 사용하여 디렉토리의 총 크기와 사용된 공간 크기를 확인할 수 있습니다.
import shutil
def list_dir_tree(dir_path):
total_size, used_size, _ = shutil.disk_usage(dir_path)
print(f"[DIR] {dir_path} (Total: {total_size} bytes, Used: {used_size} bytes)")
for root, _, files in os.walk(dir_path):
for file in files:
file_path = os.path.join(root, file)
file_size = os.path.getsize(file_path)
print(f"[FILE] {file_path} ({file_size} bytes)")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
shutil.disk_usage()
함수를 사용하여 디렉토리의 크기 정보를 가져옵니다.os.path.getsize()
함수를 사용하여 각 파일의 크기를 확인합니다.
custom 함수 사용
- 직접 재귀 함수를 작성하여 디렉토리 트리를 탐색하고 목록을 출력할 수 있습니다.
def list_dir_tree(dir_path, indent=""):
print(f"{indent}[DIR] {dir_path}")
for child in os.listdir(dir_path):
child_path = os.path.join(dir_path, child)
if os.path.isdir(child_path):
list_dir_tree(child_path, indent + " ")
else:
print(f"{indent}[FILE] {child_path}")
if __name__ == "__main__":
dir_path = "/path/to/directory"
list_dir_tree(dir_path)
list_dir_tree()
함수를 재귀적으로 호출하여 디렉토리 트리를 탐색합니다.
- 대체 방법들은 앞서 소개한 방법들보다 코드가 더 복잡하거나 성능이 저하될 수 있습니다.
- 상황에 맞는 방법을 선택하여 사용하는 것이 중요합니다.
이 외에도 다양한 방법으로 디렉토리 트리 목록을 출력할 수 있습니다.
- 필요에 따라 코드를 수정하거나 다른 모듈을 활용하여 원하는 결과를 얻도록 조정하세요.
python file directory