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>
此程式碼假定一個資料夾的固定深度,從而阻止其正確執行提取巢狀資料夾中的檔案路徑。為了解決這個問題,我們需要合併目前的根值,它提供了目前迭代資料夾的路徑:
<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中文網其他相關文章!