TechnologieTeamSite/scripts/print_project.py
2025-03-11 15:12:19 +01:00

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()