ホームページ  >  記事  >  バックエンド開発  >  Python で 1 つのサブディレクトリ レベルを超えてフォルダーの内容を再帰的に読み取る方法は?

Python で 1 つのサブディレクトリ レベルを超えてフォルダーの内容を再帰的に読み取る方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-18 14:42:03715ブラウズ

How to Recursively Read Folder Contents Beyond One Subdirectory Level in Python?

Python の再帰的フォルダー読み取り

この疑問は、Python スクリプトを使用してフォルダー構造内のテキスト ファイルの内容を再帰的に読み取るときに発生します。ただし、提供された最初のコードでは、1 つのフォルダーの深さのみを読み取るという制限が発生しました。

問題の特定

問題はハードコードされたパスにあります: outfileName = rootdir "/"フォルダー「/py-outfile.txt」。このパスは、ターゲット ファイルがルート ディレクトリの 1 つ下のサブフォルダーにあることを前提としています。

解決策

この制限に対処するには、os の戻り値を理解する必要があります。 walk:

  • root: 処理中の現在のパス。
  • subdirs: ルート内のサブディレクトリのリスト。
  • files: ディレクトリ以外のファイルのリスト。 root.

filePath = rootdir '/' file を使用する代わりに、os.path.join を利用してルートとファイルを結合する必要があります: filePath = os.path.join(root, file)。このアプローチにより、フォルダー階層を正しく移動できるようになります。

改訂されたコード

コードの改訂版は次のとおりです。

import os
import sys

walk_dir = sys.argv[1]

print('walk_dir = ' + walk_dir)

# Convert to absolute path (recommended if the working directory may change during execution)
walk_dir = os.path.abspath(walk_dir)
print('walk_dir (absolute) = ' + os.path.abspath(walk_dir))

for root, subdirs, files in os.walk(walk_dir):
    print('--\nroot = ' + root)
    list_file_path = os.path.join(root, 'my-directory-list.txt')
    print('list_file_path = ' + list_file_path)

    with open(list_file_path, 'wb') as list_file:
        for subdir in subdirs:
            print('\t- subdirectory ' + subdir)

        for filename in files:
            file_path = os.path.join(root, filename)
            print('\t- file %s (full path: %s)' % (filename, file_path))

            with open(file_path, 'rb') as f:
                f_content = f.read()
                list_file.write(('The file %s contains:\n' % filename).encode('utf-8'))
                list_file.write(f_content)
                list_file.write(b'\n')

これ修正されたコードは、フォルダー構造全体を再帰的に走査し、各ファイルの内容を指定された list_file_path に書き込むようになります。

以上がPython で 1 つのサブディレクトリ レベルを超えてフォルダーの内容を再帰的に読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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