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!