ホームページ  >  記事  >  バックエンド開発  >  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?

Python で os.walk() を使用してディレクトリを再帰的に走査する: 詳細ガイド

概要

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. 現在のディレクトリ内のファイルを反復処理し、各ファイルを次のように出力します。その入れ子level.

出力

この改良されたコードを使用すると、目的の出力が得られます。

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

この出力では、Aおよび B はディレクトリを表し、a.txt、b.txt、および c.out はファイルを表します。接頭辞のハイフンの数は、各項目のネスト レベルを示します。

以上がPython の os.walk() 関数の出力をカスタマイズして、ネストされたディレクトリ リストを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。