>  기사  >  백엔드 개발  >  중첩된 디렉토리 목록을 생성하기 위해 Python의 os.walk() 함수 출력을 어떻게 사용자 정의할 수 있습니까?

중첩된 디렉토리 목록을 생성하기 위해 Python의 os.walk() 함수 출력을 어떻게 사용자 정의할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-08 15:57:02832검색

How Can I Customize the Output of Python's os.walk() Function to Create a Nested Directory Listing?

os.walk()를 사용하여 Python에서 디렉터리를 재귀적으로 순회하는 방법: 세부 안내서

소개

Python의 os.walk() 함수는 디렉토리 트리를 재귀적으로 탐색하는 강력한 메커니즘을 제공합니다. 지정된 디렉토리 내의 모든 디렉토리와 파일을 반복하므로 파일 관리 및 디렉토리 탐색과 같은 작업에 필수적인 도구입니다.

문제: 디렉토리 목록 출력 사용자 정의

os.walk()의 기능을 시연하려면 다음 시나리오를 고려하십시오. 루트 디렉터리에서 재귀적으로 탐색하고 중첩된 수준을 포함하여 디렉터리 및 파일의 사용자 정의 목록을 인쇄하려고 합니다.

초기 코드 및 O/P

다음 코드 사용:

import os
import fnmatch

for root, dir, files in os.walk("."):
    print(root)
    print("")
    for items in fnmatch.filter(files, "*"):
        print("..." + items)
    print("")

다음 출력을 얻습니다.

.

...Python_Notes
...pypy.py
...pypy.py.save
...classdemo.py
....goutputstream-J9ZUXW
...latest.py
...pack.py
...classdemo.pyc
...Python_Notes~
...module-demo.py
...filetype.py

./packagedemo

...classdemo.py
...__init__.pyc
...__init__.py
...classdemo.pyc

그러나 이 출력은 충족하지 않습니다. 원하는 형식:

A
---a.txt
---b.txt
---B
------c.out

솔루션

출력을 사용자 정의하려면 향상된 접근 방식이 필요합니다. 다음 코드는 원하는 형식을 얻습니다.

import os

# traverse root directory, and list directories as dirs and files as files
for root, dirs, files in os.walk("."):
    path = root.split(os.sep)
    print((len(path) - 1) * '---', os.path.basename(root))
    for file in files:
        print(len(path) * '---', file)

설명

이 코드는 다음 논리를 사용합니다.

  1. 루트를 분할합니다. 운영 체제의 디렉터리 구분 기호(예: UNIX의 경우 '/')를 사용하여 목록 경로에 경로를 추가합니다.
  2. 중첩 수준을 나타내는 적절한 수의 선행 하이픈과 함께 현재 디렉터리의 기본 이름을 인쇄합니다.
  3. 현재 디렉터리의 파일을 반복하고 중첩 수준으로 각 파일을 인쇄합니다.

출력

이 향상된 코드를 사용하면 원하는 출력을 얻습니다.

A
---a.txt
---b.txt
---B
------c.out

이 출력에서 ​​A와 B는 디렉터리를 나타내고 a.txt, b.txt 및 c.out은 파일을 나타냅니다. 하이픈 접두사 수는 각 항목의 중첩 수준을 나타냅니다.

위 내용은 중첩된 디렉토리 목록을 생성하기 위해 Python의 os.walk() 함수 출력을 어떻게 사용자 정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.