erste Fassung rein

This commit is contained in:
2025-12-02 22:56:45 +01:00
parent f7f8aca5f1
commit ed416a5315
3 changed files with 98 additions and 13 deletions
+35 -9
View File
@@ -3,7 +3,7 @@ import os
import re
import sys
from pathlib import Path
from configparser import ConfigParser
from configparser import RawConfigParser
from fnmatch import fnmatch
import ezdxf
@@ -46,7 +46,8 @@ def load_ignore_patterns(cfg_path: Path) -> tuple[list[str], list[str]]:
print(f"Bitte erstellen Sie die Datei 'translator.cfg' im Verzeichnis: {cfg_path}")
sys.exit(1)
config = ConfigParser()
# RawConfigParser verhindert dass Backslashes in Regex-Mustern escaped werden
config = RawConfigParser()
try:
config.read(config_file, encoding='utf-8')
except Exception as e:
@@ -81,7 +82,7 @@ def load_ignore_patterns(cfg_path: Path) -> tuple[list[str], list[str]]:
return wildcard_patterns, regex_patterns
def should_ignore_text(text: str, wildcard_patterns: list[str], regex_patterns: list[str]) -> bool:
def should_ignore_text(text: str, wildcard_patterns: list[str], regex_patterns: list[str], debug: bool = False) -> bool:
"""
Prüft ob ein Text ignoriert werden soll basierend auf den Mustern.
@@ -89,6 +90,7 @@ def should_ignore_text(text: str, wildcard_patterns: list[str], regex_patterns:
text: Zu prüfender Text
wildcard_patterns: Liste der Wildcard-Muster (*,?)
regex_patterns: Liste der regulären Ausdrücke
debug: Wenn True, gibt Debug-Informationen aus
Returns:
True wenn Text ignoriert werden soll, False sonst
@@ -96,12 +98,16 @@ def should_ignore_text(text: str, wildcard_patterns: list[str], regex_patterns:
# Prüfe Wildcard-Muster
for pattern in wildcard_patterns:
if fnmatch(text, pattern):
if debug:
print(f" DEBUG: '{text}' matched wildcard '{pattern}'")
return True
# Prüfe Regex-Muster
for pattern in regex_patterns:
try:
if re.search(pattern, text):
if debug:
print(f" DEBUG: '{text}' matched regex '{pattern}'")
return True
except re.error:
# Falls ungültiger Regex, ignoriere dieses Muster
@@ -111,7 +117,7 @@ def should_ignore_text(text: str, wildcard_patterns: list[str], regex_patterns:
return False
def extract_text_from_dxf(filename: Path, wildcard_patterns: list[str], regex_patterns: list[str]) -> list[str]:
def extract_text_from_dxf(filename: Path, wildcard_patterns: list[str], regex_patterns: list[str], debug: bool = False) -> list[str]:
"""
Extrahiert alle TEXT und MTEXT Objekte aus einer DXF Datei.
Verwendet ein Set, um Duplikate zu vermeiden.
@@ -120,6 +126,7 @@ def extract_text_from_dxf(filename: Path, wildcard_patterns: list[str], regex_pa
filename: Pfad zur DXF Datei
wildcard_patterns: Liste der Wildcard-Muster zum Filtern
regex_patterns: Liste der Regex-Muster zum Filtern
debug: Wenn True, gibt Debug-Informationen aus
Returns:
Alphabetisch sortierte Liste mit allen gefundenen Texten (nach Filterung, ohne Duplikate)
@@ -136,8 +143,14 @@ def extract_text_from_dxf(filename: Path, wildcard_patterns: list[str], regex_pa
for entity in msp.query('TEXT'):
if entity.dxf.text:
total_count += 1
text = entity.dxf.text
if should_ignore_text(text, wildcard_patterns, regex_patterns):
text = entity.dxf.text.strip() # Entferne führende/nachfolgende Leerzeichen
# Ignoriere leere Texte
if not text:
ignored_count += 1
continue
if should_ignore_text(text, wildcard_patterns, regex_patterns, debug):
ignored_count += 1
else:
texts_set.add(text)
@@ -146,8 +159,14 @@ def extract_text_from_dxf(filename: Path, wildcard_patterns: list[str], regex_pa
for entity in msp.query('MTEXT'):
if entity.text:
total_count += 1
text = entity.text
if should_ignore_text(text, wildcard_patterns, regex_patterns):
text = entity.text.strip() # Entferne führende/nachfolgende Leerzeichen
# Ignoriere leere Texte
if not text:
ignored_count += 1
continue
if should_ignore_text(text, wildcard_patterns, regex_patterns, debug):
ignored_count += 1
else:
texts_set.add(text)
@@ -221,6 +240,11 @@ if __name__ == '__main__':
help='Name der Ausgabedatei (ohne Pfad, mit oder ohne .xlsx Endung)',
metavar='output.xlsx'
)
parser.add_argument(
'-d', '--debug',
action='store_true',
help='Aktiviert Debug-Ausgabe für Pattern-Matching'
)
args = parser.parse_args()
@@ -251,7 +275,9 @@ if __name__ == '__main__':
# Extrahiere Texte aus DXF
if args.extract:
print(f"Lese DXF Datei: {filename}")
texts = extract_text_from_dxf(filename, wildcard_patterns, regex_patterns)
if args.debug:
print("DEBUG-Modus aktiviert")
texts = extract_text_from_dxf(filename, wildcard_patterns, regex_patterns, args.debug)
# Erstelle Output-Dateinamen
if args.outname: