ich würde gerne überprüfen, welche Dateien sich in einem Verzeichnisbaum (dir_a) befinden, die nicht in einem anderen Verzeichnisbaum (dir_b) enthalten sind.
Hierzu habe ich u. a. kleines Programm geschrieben. Leider Funktioniert es nicht wie gedacht, da aufgrund des unterschiedlichen Wurzelverzeichnisses alle Dateien in dir_a ausgegeben werden.
Vielleicht kann mit einer bei der Lösung des Problems helfen.
Vielen Dank im Voraus
Helmut
Code: Alles auswählen
# !/usr/local/bin/python3
# coding: utf-8
"""
Vergleiche den Inhalt von zwei Verzeichnisbäumen.
"""
import os
def main():
"""
Framework für den Aufruf der Funktion, die die beiden Verzeichnisse vergleicht.
"""
dir_a, dir_b = "", ""
# Hole den Pfad zum ersten Verzeichnisbaums vom Nutzer:
pfad_ok = False
while not pfad_ok:
print("\nGebe den Pfad zum ersten Verzeichnis ein:\n")
dir_a = input()
# Prüfe, ob das eingegebene Verzeichnis existiert:
if os.path.exists(dir_a):
pfad_ok = True
else:
print("Das erste Verzeichnis existiert nicht, versuche es noch "
"einmal.")
# Hole den Pfad zum zweiten Verzeichnisbaums vom Nutzer:
pfad_ok = False
while not pfad_ok:
print("\nGebe den Pfad zum zweiten Verzeichnis ein:\n")
dir_b = input()
# Prüfe, ob der eingegebene Pfad existiert:
if os.path.exists(dir_b):
pfad_ok = True
else:
print("Das zweite Verzeichnis existiert nicht, versuche es "
"noch einmal.")
# Generiere die Dateilisten:
dateiliste_1 = get_filepaths(dir_a)
dateiliste_2 = get_filepaths(dir_b)
# Vergleiche die Dateilisten und gebe die Unterschiede aus:
dateiset_1 = set(dateiliste_1)
dateiset_2 = set(dateiliste_2)
print(dateiset_1 - dateiset_2)
def get_filepaths(verzeichnis):
"""
Erzeuge die Dateinamen in einem Verzeichnisbaum, indem der Baum von oben nach
unten durchlaufen wird.
Befülle für jedes durchlaufene Verzeichnis ein Tuple mit 'pfad', 'verzeichnisname'
und 'dateiname'
"""
dateiliste = [] # Liste, die alle Dateien im übergebenen Verzeichnis enthält.
# Durchlaufe den Verzeichnisbaum:
for root, directories, files in os.walk(verzeichnis):
for filename in files:
if filename.startswith("."): # Ignoriere versteckte Dateien
continue
# Füge die beiden Strings für den kompletten Pfad zusammen:
dateipfad = os.path.join(root, filename)
dateiliste.append(dateipfad)
return dateiliste
# Wenn der Code eigenständig laufen soll und nicht importiert werden soll, rufe die
# Funktion main() auf:
if __name__ == '__main__':
main()