首頁  >  文章  >  後端開發  >  如何在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>

此程式碼假定一個資料夾的固定深度,從而阻止其正確執行提取巢狀資料夾中的檔案路徑。為了解決這個問題,我們需要合併目前的根值,它提供了目前迭代資料夾的路徑:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn