79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
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() |