Python 2 bestimmte Zeilen lesen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Wenn man nach Clean Code programmieren will, ist BJ Lösung stets zu bevorzugen, robust und selbsterklärend.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
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.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Antworten