Home >Backend Development >Python Tutorial >How to Recursively Traverse a Folder Structure to Read Text File Contents in Python?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-10-18 14:36:44810browse

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

Python Recursive Folder Reading: Overcoming Shallow Exploration

In the realm of programming, it's often challenging to navigate complex hierarchical structures efficiently. For a budding Python enthusiast with a C /Obj-C background, recursively traversing a folder structure to read the contents of text files can pose a formidable obstacle.

Let's delve into the code you provided to understand the limitations inhibiting its recursion beyond a single folder depth:

<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>

The culprit lies in the hardcoded path for filePath:

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

This code assumes a fixed depth of one folder, preventing it from correctly extracting file paths within nested folders. To rectify this issue, we need to incorporate the current root value, which provides the path of the currently iterated folder:

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

By utilizing os.path.join, we construct an accurate full file path, allowing the code to successfully explore all levels of the folder structure.

Additionally, it's prudent to employ the with statement for handling file operations, which ensures automatic file closure, enhancing code readability and reducing potential resource leaks.

Here's a revised version of the code that addresses these issues:

<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>

With these modifications, your Python code will

The above is the detailed content of How to Recursively Traverse a Folder Structure to Read Text File Contents in Python?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn