ホームページ >バックエンド開発 >Python チュートリアル >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 サイトの他の関連記事を参照してください。