Hallo zusammen,
die letzten Wochen musste ich etwas umpriorisieren. Das Spaßprojekt "Wortspielgenerator" ist daher nach hinten gerutscht.
Ich habe nun wieder etwas mehr Zeit und daher mal das Logging eingebaut und wollte gern von Euch eine Meinung hören. Was würdet ihr verbessern?
Code: Alles auswählen
def investigate_sayings():
# TODO
# Verbesserung mittels wiki-api - Texte direkt aus Wikipedia "Sprichwörter" auslesen?
# Tutorials:
# - https://wdqs-tutorial.toolforge.org/index.php/simple-queries/the-simplest-query/basic-sparql-query/
# - https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
# Methode "tut" zu viel - Zerlegen in Beschaffung der Daten und Erstellen des Datenmodells
filename_sayings = Path("Daten/WortspielGenerator/Sprueche_raw.txt")
path_log = Path("Daten/WortspielGenerator/logs/")
path_log.mkdir(parents=True, exist_ok=True)
filename_log = Path("Daten/WortspielGenerator/logs/Sprueche_ausgemustert.txt")
logging.basicConfig(filename=str(filename_log), level=logging.DEBUG)
with open(filename_sayings, "r", encoding="UTF-8") as file:
investigated_sayings = defaultdict(list)
for line_number, line in enumerate(file, 1):
if line.startswith('"'):
saying, seperator, _ = line[1:].partition('"')
if seperator:
for word in saying.split():
if word.istitle():
investigated_sayings[saying].append(word)
else:
logging.debug(f"Fehler: Ende von Spruch in Zeile {line_number} nicht gefunden: {line.strip()}")
else:
line = line.rstrip()
if not (len(line) == 1 and line.isalpha()):
logging.debug(f"Fehler: Unerwartete(s) Zeichen in Zeile {line_number}: {line}.")
return investigated_sayings
1) Findet ihr die Methode zu lang?
2) Ist die Verschachtelungstiefe (noch) ok?
3) Kann man erkennen, was da passiert?
4) Teile des Pfades zur Log-Datei sind redundant. Würde sich der Pfad ändern, müsste man zwei Stellen ändern. Das ist natürlich nicht gut. Eine Konstante erscheint mir in diesem Kontext falsch. Würde man hier einen formatierten String nutzen? Gibt's andere Wege?
5) Sollte man hier ggf. auch einen Generator nutzen?
Ich hatte mir noch folgende Alternative überlegt:
Code: Alles auswählen
def investigate_sayings_alternative():
# TODO
# Verbesserung mittels wiki-api - Texte direkt aus Wikipedia "Sprichwörter" auslesen?
# Tutorials:
# - https://wdqs-tutorial.toolforge.org/index.php/simple-queries/the-simplest-query/basic-sparql-query/
# - https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
# Methode "tut" zu viel - Zerlegen in Beschaffung der Daten und Erstellen des Datenmodells
filename_sayings = Path("Daten/WortspielGenerator/Sprueche_raw.txt")
path_log = Path("Daten/WortspielGenerator/logs/")
path_log.mkdir(parents=True, exist_ok=True)
filename_log = Path("Daten/WortspielGenerator/logs/Sprueche_ausgemustert.txt")
with open(filename_sayings, "r", encoding="UTF-8") as file:
investigated_sayings = defaultdict(list)
for line_number, line in enumerate(file, 1):
investigate_saying(line, line_number, filename_log, investigated_sayings)
return investigated_sayings
def investigate_saying(line, line_number, filename_log, investigated_sayings):
logging.basicConfig(filename=str(filename_log), level=logging.DEBUG)
if line.startswith('"'):
saying, seperator, _ = line[1:].partition('"')
if seperator:
for word in saying.split():
if word.istitle():
investigated_sayings[saying].append(word)
else:
logging.debug(f"Fehler: Ende von Spruch in Zeile {line_number} nicht gefunden: {line.strip()}")
else:
line = line.rstrip()
if not (len(line) == 1 and line.isalpha()):
logging.debug(f"Fehler: Unerwartete(s) Zeichen in Zeile {line_number}: {line}.")
Allerdings stört mich die Liste der übergebenen Parameter. Irgendwie sind die nicht zusammenhängend und semantisch auch nicht gut lesbar. (Leider bin ich mir unsicher, ob man verstehen kann, was ich meine. Bitte gerne nachfragen)
Einziger Vorteil ist, dass die Alternative eine geringere Verschachtelungstiefe hat und die Methoden nicht so lang sind.
Tja nun. Ich bin gespannt auf Eure Anmerkungen.
Am Rande:
Ich würde die Log-Datei gerne auf ".log" enden lassen. Allerdings kann man sie dann in PyCharm nicht mehr anzeigen lassen. Hat jemand eine Idee, warum das so ist?
LG