124 lines
4.8 KiB
Python
124 lines
4.8 KiB
Python
import os
|
|
|
|
def list_directory_contents(root_dir, ignore_dirs, ignore_files, max_file_size_mb=5):
|
|
"""
|
|
Gibt rekursiv alle Verzeichnisse, Unterverzeichnisse und Dateien im angegebenen Stammverzeichnis aus
|
|
und zeigt den vollständigen Inhalt jeder Datei an.
|
|
|
|
Args:
|
|
root_dir (str): Das Stammverzeichnis, von dem aus begonnen werden soll
|
|
ignore_dirs (list): Liste der zu ignorierenden Verzeichnisnamen
|
|
ignore_files (list): Liste der zu ignorierenden Dateinamen
|
|
max_file_size_mb (int): Maximale Dateigröße zum Lesen in MB
|
|
"""
|
|
# Überprüfen, ob das Stammverzeichnis existiert
|
|
if not os.path.exists(root_dir):
|
|
print(f"Fehler: Verzeichnis '{root_dir}' existiert nicht.")
|
|
return
|
|
|
|
# Binäre Dateierweiterungen, deren Inhalt nicht angezeigt werden soll
|
|
binary_extensions = {
|
|
'.exe', '.dll', '.so', '.dylib', '.bin', '.dat', '.db', '.sqlite', '.sqlite3',
|
|
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tif', '.tiff', '.ico', '.webp',
|
|
'.mp3', '.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv', '.wav', '.ogg',
|
|
'.zip', '.tar', '.gz', '.bz2', '.7z', '.rar', '.pdf', '.doc', '.docx',
|
|
'.xls', '.xlsx', '.ppt', '.pptx'
|
|
}
|
|
|
|
# Kodierungen, die beim Lesen von Dateien versucht werden sollen
|
|
encodings = ['utf-8', 'latin-1', 'cp1252', 'iso-8859-1']
|
|
|
|
max_file_size = max_file_size_mb * 1024 * 1024 # MB in Bytes umrechnen
|
|
|
|
# Durch die Verzeichnisstruktur laufen
|
|
for dirpath, dirnames, filenames in os.walk(root_dir):
|
|
# Ignorierte Verzeichnisse aus dirnames entfernen, um zu verhindern, dass os.walk sie durchläuft
|
|
dirnames[:] = [d for d in dirnames if d not in ignore_dirs]
|
|
|
|
# Aktuellen Verzeichnispfad ausgeben
|
|
rel_path = os.path.relpath(dirpath, root_dir)
|
|
if rel_path == '.':
|
|
print(f"\n\n{'=' * 80}")
|
|
print(f"VERZEICHNIS: {root_dir}")
|
|
print(f"{'=' * 80}")
|
|
else:
|
|
print(f"\n\n{'=' * 80}")
|
|
print(f"VERZEICHNIS: {os.path.join(root_dir, rel_path)}")
|
|
print(f"{'=' * 80}")
|
|
|
|
# Unterverzeichnisse ausgeben
|
|
if dirnames:
|
|
print("\nUnterverzeichnisse:")
|
|
for dirname in dirnames:
|
|
print(f" - {dirname}")
|
|
|
|
# Dateien und ihre Inhalte ausgeben
|
|
if filenames:
|
|
# Zu ignorierende Dateien herausfiltern
|
|
filtered_filenames = [f for f in filenames if f not in ignore_files]
|
|
|
|
print("\nDateien:")
|
|
for filename in filtered_filenames:
|
|
file_path = os.path.join(dirpath, filename)
|
|
print(f"\n{'-' * 50}")
|
|
print(f"DATEI: {file_path}")
|
|
print(f"{'-' * 50}")
|
|
|
|
try:
|
|
# Dateigröße überprüfen
|
|
file_size = os.path.getsize(file_path)
|
|
if file_size > max_file_size:
|
|
print(f"Datei ist zu groß, um den Inhalt anzuzeigen ({file_size / 1024 / 1024:.2f} MB).")
|
|
continue
|
|
|
|
# Überprüfen, ob es sich um eine Binärdatei anhand der Erweiterung handelt
|
|
file_ext = os.path.splitext(filename)[1].lower()
|
|
if file_ext and file_ext in binary_extensions:
|
|
print(f"Binärdatei erkannt ({file_ext}). Inhalt wird nicht angezeigt.")
|
|
continue
|
|
|
|
# Mehrere Kodierungen ausprobieren
|
|
content = None
|
|
for encoding in encodings:
|
|
try:
|
|
with open(file_path, 'r', encoding=encoding) as f:
|
|
content = f.read()
|
|
break
|
|
except UnicodeDecodeError:
|
|
continue
|
|
|
|
if content is not None:
|
|
print(content)
|
|
else:
|
|
print("Datei konnte mit keiner der versuchten Kodierungen gelesen werden.")
|
|
|
|
except (PermissionError, IsADirectoryError) as e:
|
|
print(f"Dateiinhalt konnte nicht gelesen werden: {str(e)}")
|
|
except Exception as e:
|
|
print(f"Unerwarteter Fehler beim Lesen der Datei: {str(e)}")
|
|
|
|
def main():
|
|
root_dir = r"C:\Users\DamjanSavic\Documents\Techologie.Team"
|
|
|
|
# Zu ignorierende Verzeichnisse
|
|
ignore_dirs = [
|
|
"__pycache__",
|
|
".idea",
|
|
"node_modules",
|
|
".git",
|
|
"External Libraries",
|
|
"Scratches and Consoles"
|
|
]
|
|
|
|
# Zu ignorierende Dateien
|
|
ignore_files = [
|
|
"package-lock.json"
|
|
]
|
|
|
|
# Maximale Dateigröße für die Anzeige des Inhalts (in MB)
|
|
max_file_size_mb = 5
|
|
|
|
list_directory_contents(root_dir, ignore_dirs, ignore_files, max_file_size_mb)
|
|
|
|
if __name__ == "__main__":
|
|
main() |