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

Patricia Arquette
Freigeben: 2024-10-18 14:36:44
Original
768 Leute haben es durchsucht

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>
Nach dem Login kopieren

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

<code class="python">filePath = rootdir + '/' + file</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage