Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man eine Ordnerstruktur rekursiv durchlaufen, um den Inhalt einer Textdatei in Python zu lesen?

Wie kann man eine Ordnerstruktur rekursiv durchlaufen, um den Inhalt einer Textdatei in Python zu lesen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-18 14:36:44773Durchsuche

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

Rekursives Lesen von Python-Ordnern: Überwindung der oberflächlichen Erkundung

Im Bereich der Programmierung ist es oft eine Herausforderung, durch komplexe hierarchische Strukturen effizient zu navigieren. Für einen angehenden Python-Enthusiasten mit einem C-/Obj-C-Hintergrund kann das rekursive Durchlaufen einer Ordnerstruktur zum Lesen des Inhalts von Textdateien ein gewaltiges Hindernis darstellen.

Lassen Sie uns in den von Ihnen bereitgestellten Code eintauchen, um die Einschränkungen zu verstehen, die ihn behindern seine Rekursion über eine einzelne Ordnertiefe hinaus:

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

Der Übeltäter liegt im fest codierten Pfad für filePath:

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

Dieser Code geht von einer festen Tiefe eines Ordners aus und verhindert so, dass er korrekt funktioniert Extrahieren von Dateipfaden in verschachtelten Ordnern. Um dieses Problem zu beheben, müssen wir den aktuellen Root-Wert integrieren, der den Pfad des aktuell iterierten Ordners bereitstellt:

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

Durch die Verwendung von os.path.join erstellen wir einen genauen vollständigen Dateipfad, der Folgendes ermöglicht den Code, um alle Ebenen der Ordnerstruktur erfolgreich zu erkunden.

Darüber hinaus ist es ratsam, die with-Anweisung für die Verarbeitung von Dateivorgängen zu verwenden, was das automatische Schließen von Dateien gewährleistet, die Lesbarkeit des Codes verbessert und potenzielle Ressourcenlecks reduziert.

Hier ist eine überarbeitete Version des Codes, die diese Probleme behebt:

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

Mit diesen Änderungen wird Ihr Python-Code

Das obige ist der detaillierte Inhalt vonWie kann man eine Ordnerstruktur rekursiv durchlaufen, um den Inhalt einer Textdatei in Python zu lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn