Seite 1 von 2

Re: Python 2 bestimmte Zeilen lesen?

Verfasst: Mittwoch 17. Dezember 2014, 20:44
von darktrym
Wenn man nach Clean Code programmieren will, ist BJ Lösung stets zu bevorzugen, robust und selbsterklärend.

Re: Python 2 bestimmte Zeilen lesen?

Verfasst: Donnerstag 18. Dezember 2014, 08:07
von mutetella
BlackJack hat geschrieben:Und das hardcoden einer magischen Zahl ist IMHO *deutlich* schlimmer...
Nochmals: Mit meinem Konsolenbeispiel wollte ich MrRatlos lediglich eine Möglichkeit aufzeigen, wie er an den filename kommt. Natürlich würde das *so* nicht in den Programmcode gehören...

Wie auch immer, ich würde der ``startswith`` Lösung eine mit ``endswith`` vorziehen:

Code: Alles auswählen

def endswith_(text, endings):
    for ending in endings:
        if text.endswith(ending):
            return True
    return False

def get_filename(text, extensions):
    if endswith_(text, extensions):
        return text.split(':')[-1].strip()

Code: Alles auswählen

>>> line = 'song_begin: As I Lay Dying - 94 hours.mp3'
>>> get_filename(line, ('ogg', 'flac', 'mp3', 'wmv'))
'As I Lay Dying - 94 hours.mp3'
mutetella

Re: Python 2 bestimmte Zeilen lesen?

Verfasst: Donnerstag 18. Dezember 2014, 09:02
von BlackJack
@mutetella: Das ist doch dann gar nicht mehr eindeutig und würde auch Sachen erwischen die gar keine Dateinamen sind oder zumindest nicht in der Zeile stehen die hier gewünscht ist, nämlich die, die mit 'song begin: ' anfangen. Auf der anderen Seite werden eventuell Dateinamen nicht gefunden wenn sie andere Endungen haben als in der Liste stehen. Das schliesst sogar andere Schreibweisen mit ein von Endungen die in der Liste stehen wie 'Wav' oder 'MP3'. Es gibt aber noch 'mod', 'it', 'mid', 'midi', 'rmi', 'xm', 'ape', 'wma', 'mp4', 'mpa', 'aac', und was weiss ich noch für Endungen für Audiodateien.

Ausserdem sollte man auch den Punkt prüfen denn sonst werden auch Felder als Dateinamen ausgelesen die gar keine sind, wie zum Beispiel ein Kommentar 'Ad jingle of Aflac'.

`endswith_()` ist überflüssig — `str.endswith()` kann das bereits.

Das Aufteilen an Doppelpunkten wird falsche Ergebnisse liefern wenn mindestens ein Doppelpunkt im Dateinamen enthalten ist.

Re: Python 2 bestimmte Zeilen lesen?

Verfasst: Donnerstag 18. Dezember 2014, 09:20
von mutetella
BlackJack hat geschrieben:... zumindest nicht in der Zeile stehen die hier gewünscht ist, nämlich die, die mit 'song begin: ' anfangen.
Eben. Da sind wir wieder bei den "verlässlichen" Daten. Ich denke, beim Dateiname einer Audiodatei kann man sich eher darauf verlassen, dass dieser eine "Audioextension" hat als darauf, dass die Zeile mit 'song_begin:' beginnt.
BlackJack hat geschrieben:Auf der anderen Seite werden eventuell Dateinamen nicht gefunden wenn sie andere Endungen haben als in der Liste stehen.
Stimmt. Die Liste ist letztlich entscheidend.
BlackJack hat geschrieben:Ausserdem sollte man auch den Punkt prüfen denn sonst werden auch Felder als Dateinamen ausgelesen die gar keine sind, ...
Ok, noch ein Punkt für Dich!
BlackJack hat geschrieben:`endswith_()` ist überflüssig — `str.endswith()` kann das bereits.
Och Menno, dass Python immer alles können muss...
BlackJack hat geschrieben:Das Aufteilen an Doppelpunkten wird falsche Ergebnisse liefern wenn mindestens ein Doppelpunkt im Dateinamen enthalten ist.
Gut, Du hast gewonnen! ``startswith`` ist wohl tatsächlich sinnvoller... :(

mutetella

Re: Python 2 bestimmte Zeilen lesen?

Verfasst: Donnerstag 18. Dezember 2014, 09:26
von BlackJack
@mutetella: Also ich hatte das so verstanden das das ein vorgegebenes Dateiformat ist und das eben genau die Zeilen gewünscht sind, die mit 'song_begin: ' anfangen. Das sieht nach dem Playlistenformat vom mpd (music player daemon) aus.

Re: Python 2 bestimmte Zeilen lesen?

Verfasst: Donnerstag 18. Dezember 2014, 09:32
von EyDu
mutetella hat geschrieben:
BlackJack hat geschrieben:... zumindest nicht in der Zeile stehen die hier gewünscht ist, nämlich die, die mit 'song begin: ' anfangen.
Eben. Da sind wir wieder bei den "verlässlichen" Daten. Ich denke, beim Dateiname einer Audiodatei kann man sich eher darauf verlassen, dass dieser eine "Audioextension" hat als darauf, dass die Zeile mit 'song_begin:' beginnt.
Ich würde bei strukturierten Daten genau das Gegenteil behaupten. Das Format sieht für mich so aus, als wenn alle Informationen zu einem Lied zwischen song_begin und song_end eingeschlossen sind. Wenn irgendwo ein song_end ohne ein song_begin auftritt, dass wäre das ein recht großer Fehler in der Datei.

Abschließend kann man sich natürlich noch überlegen, in welchen anderen Feldern prinzipiell noch gültige Dateinamen stehen könnten oder Einträge, die wie gültige Namen aussehen. Titel, Interpret, vielleicht selbst definierte Felder, etc. Das führt dann zu richtigen Problemen.