Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Python Ordnerinhalte über eine Unterverzeichnisebene hinaus rekursiv lesen?

Wie kann ich in Python Ordnerinhalte über eine Unterverzeichnisebene hinaus rekursiv lesen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-18 14:42:03851Durchsuche

How to Recursively Read Folder Contents Beyond One Subdirectory Level in Python?

Rekursives Lesen von Python-Ordnern

Diese Frage stellt sich, wenn mit einem Python-Skript gearbeitet wird, um den Inhalt von Textdateien in einer Ordnerstruktur rekursiv zu lesen. Beim ursprünglich bereitgestellten Code gab es jedoch eine Einschränkung, da er nur einen Ordner tief lesen konnte.

Problemidentifizierung

Das Problem liegt im fest codierten Pfad: outfileName = rootdir „/“ Ordner „/py-outfile.txt“. Bei diesem Pfad wird davon ausgegangen, dass sich die Zieldatei einen Unterordner unterhalb des Stammverzeichnisses befindet.

Lösung

Um diese Einschränkung zu beheben, müssen wir die Rückgabewerte von OS verstehen. walk:

  • root: Der aktuelle Pfad, der verarbeitet wird.
  • Unterverzeichnisse: Eine Liste der Unterverzeichnisse im Stammverzeichnis.
  • Dateien: Eine Liste der Nicht-Verzeichnisdateien in root.

Anstatt filePath = rootdir '/' file zu verwenden, sollten wir os.path.join verwenden, um root und file zu kombinieren: filePath = os.path.join(root, file). Dieser Ansatz ermöglicht es uns, korrekt durch die Ordnerhierarchie zu navigieren.

Überarbeiteter Code

Hier ist eine überarbeitete Version des Codes:

import os
import sys

walk_dir = sys.argv[1]

print('walk_dir = ' + walk_dir)

# Convert to absolute path (recommended if the working directory may change during execution)
walk_dir = os.path.abspath(walk_dir)
print('walk_dir (absolute) = ' + os.path.abspath(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')

Dies Der überarbeitete Code durchläuft nun rekursiv die gesamte Ordnerstruktur und schreibt den Inhalt jeder Datei in den angegebenen list_file_path.

Das obige ist der detaillierte Inhalt vonWie kann ich in Python Ordnerinhalte über eine Unterverzeichnisebene hinaus rekursiv 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