ホームページ  >  記事  >  バックエンド開発  >  Python でフォルダー構造を再帰的に走査してテキスト ファイルの内容を読み取る方法

Python でフォルダー構造を再帰的に走査してテキスト ファイルの内容を読み取る方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-18 14:36:44769ブラウズ

How to Recursively Traverse a Folder Structure to Read Text File Contents in Python?

Python の再帰的フォルダー読み取り: 浅い探索の克服

プログラミングの領域では、複雑な階層構造を効率的にナビゲートすることがしばしば困難になります。 C /Obj-C のバックグラウンドを持つ新進気鋭の Python 愛好家にとって、フォルダー構造を再帰的に走査してテキスト ファイルの内容を読み取ることは、大きな障害となる可能性があります。

提供されたコードを詳しく調べて、制限を理解しましょう。単一フォルダーの深さを超えた再帰:

<code class="python">import os
import sys

rootdir = sys.argv[1]

for root, subFolders, files in os.walk(rootdir):

    for folder in subFolders:
        outfileName = rootdir + "/" + folder + "/py-outfile.txt" # hardcoded path
        folderOut = open( outfileName, 'w' )
        print "outfileName is " + outfileName

        for file in files:
            filePath = rootdir + '/' + file
            f = open( filePath, 'r' )
            toWrite = f.read()
            print "Writing '" + toWrite + "' to" + filePath
            folderOut.write( toWrite )
            f.close()

        folderOut.close()</code>

原因は filePath のハードコーディングされたパスにあります:

<code class="python">filePath = rootdir + '/' + file</code>

このコードは 1 つのフォルダーの深さが固定されていると想定しているため、正しく実行できません。ネストされたフォルダー内のファイル パスを抽出します。この問題を修正するには、現在反復処理されているフォルダーのパスを提供する現在のルート値を組み込む必要があります:

<code class="python">filePath = os.path.join(root, file)</code>

os.path.join を利用することで、正確な完全なファイル パスを構築し、このコードを使用すると、フォルダー構造のすべてのレベルを正常に探索できます。

さらに、ファイル操作の処理には with ステートメントを使用することが賢明です。これにより、ファイルが自動的に閉じられ、コードの可読性が向上し、リソース リークの可能性が減ります。

これらの問題に対処するコードの改訂版は次のとおりです:

<code class="python">import os
import sys

walk_dir = sys.argv[1]

print('walk_dir = ' + walk_dir)

# Converting to absolute path ensures portability
walk_dir = os.path.abspath(walk_dir)
print('walk_dir (absolute) = ' + 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')</code>

これらの変更により、Python コードは次のようになります

以上がPython でフォルダー構造を再帰的に走査してテキスト ファイルの内容を読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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