import os import re def clean_init_files(root_dir='.'): """ Durchsucht rekursiv alle __init__.py Dateien und entfernt: - Einzeilige Kommentare - Mehrzeilige Kommentare/Docstrings - Variablen, die mit __ beginnen und enden - VersionInfo- und version_info-Zuweisungen """ # Regex-Pattern für zu entfernende Zeilen comment_pattern = re.compile(r'^\s*#.*$') dunder_pattern = re.compile(r'^\s*__\w+__\s*=.*$') version_pattern = re.compile(r'^\s*(VersionInfo|version_info)\s*=.*$') # Zu ignorierende Verzeichnisse ignore_dirs = ['venv', '.venv', 'env', '.env'] # Zähle bearbeitete Dateien processed_files = 0 for dirpath, dirnames, filenames in os.walk(root_dir): # Ignoriere venv-Verzeichnisse dirnames[:] = [d for d in dirnames if d not in ignore_dirs] for filename in filenames: if filename == '__init__.py': file_path = os.path.join(dirpath, filename) # Datei lesen with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # Mehrzeilige Kommentare entfernen # Entferne Docstrings (''' oder """) content = re.sub(r'(?:\'\'\'|""")[\s\S]*?(?:\'\'\'|""")', '', content) # Verarbeite die Zeilen lines = content.splitlines() # Zu behaltende Zeilen filtern filtered_lines = [] for line in lines: if (not comment_pattern.match(line) and not dunder_pattern.match(line) and not version_pattern.match(line)): filtered_lines.append(line) # Leere aufeinanderfolgende Zeilen entfernen clean_lines = [] prev_empty = False for line in filtered_lines: is_empty = line.strip() == '' if not (is_empty and prev_empty): clean_lines.append(line) prev_empty = is_empty # Entferne Leerzeilen am Anfang und Ende while clean_lines and clean_lines[0].strip() == '': clean_lines.pop(0) while clean_lines and clean_lines[-1].strip() == '': clean_lines.pop() # Füge eine Leerzeile am Ende hinzu, wenn die Datei nicht leer ist if clean_lines: clean_lines.append('') # Schreibe bereinigte Datei zurück with open(file_path, 'w', encoding='utf-8') as f: f.write('\n'.join(clean_lines)) processed_files += 1 print(f"Bereinigt: {file_path}") print(f"\nAbgeschlossen: {processed_files} __init__.py Dateien bereinigt") if __name__ == "__main__": clean_init_files()