*args per method in eine .txt-file schreiben ohne ein Trennzeichen nach letztem arg entsteht.

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.
Antworten
CSchilling
User
Beiträge: 25
Registriert: Sonntag 4. April 2021, 09:13

Grüßt euch,

ich möchte eine beliebeige Anzahl an Argumenten in eine file schreiben.
Die Argumente sollten jeweils durch ein Komma getrennt werden und am Ende einen Zeilenumbruch erhalten.
Das klappt soweit auch wunderbar, bis auf das nach dem letzten Argument auch ein Komma steht, dass da nicht stehen soll.

Wie kann ich meinen Code optimieren, sodass lediglich zwischen den Argumenten ein Trennzeichen steht.

Code: Alles auswählen

class Documentation:

    def __init__(self, filename, *args):

        self.filename = filename
        self.args = args

    def store_data(self):
        if Path(self.filename).is_file():
            with open(self.filename, "a", encoding="utf-8") as file:
                for arg in self.args:
                    file.write(str(arg) + ",")
                file.write("\n")
Danke für eure Anregungen und Hilfe :ugeek:
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Klasse ist überflüssig, da sie außer einer Methode nichts macht, eine Funktion wäre einfacher.
Eine Funktion sollte im Fehlerfall nicht einfach nichts machen, denn so kann man den Fehler ja nie entdecken, das is_fle kann man daher einfach weglassen.
Dein Problem ist einfach zu lösen, schreibe einfach am Ende kein Komma. Das geht am einfachsten per join.

Code: Alles auswählen

def store_data(filename, *args):
    line = ",".join(map(str, args))
    with open(filename, "a", encoding="utf-8") as output:
        output.write(f"{line}\n")
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei ich hier noch die *-Magie in Frage stellen wollen würde. Warum kann man der Funktion nicht einfach eine Liste von Werten übergeben? Beziehungsweise würde vom Code her ja jedes iterierbare Objekt funktionieren.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
CSchilling
User
Beiträge: 25
Registriert: Sonntag 4. April 2021, 09:13

Sirius3 hat geschrieben: Mittwoch 5. Mai 2021, 21:56 Die Klasse ist überflüssig, da sie außer einer Methode nichts macht, eine Funktion wäre einfacher.
Eine Funktion sollte im Fehlerfall nicht einfach nichts machen, denn so kann man den Fehler ja nie entdecken, das is_fle kann man daher einfach weglassen.
Dein Problem ist einfach zu lösen, schreibe einfach am Ende kein Komma. Das geht am einfachsten per join.
Vielen Dank, wiedermal für deine schnelle Antwort. Die methode ist nur eine von mehreren in der Klasse, welche sich mit dem schreiben, lesen, erstellen von files "beschäftigt". Die Klasse wird von einem anderen Pythonprogramm welches in einem Loop Daten aus Websocket-Streams verarbeitet, genutzt. Einzelne Funktionen würden in dem Fall das selbe erreichen, da hast du recht, Danke! Die join Funktion werde ich ausprobieren.
__blackjack__ hat geschrieben: Donnerstag 6. Mai 2021, 10:22 Wobei ich hier noch die *-Magie in Frage stellen wollen würde. Warum kann man der Funktion nicht einfach eine Liste von Werten übergeben? Beziehungsweise würde vom Code her ja jedes iterierbare Objekt funktionieren.
Wie in der Antwort zu Sirius beschrieben, bekomme ich in einem anderem Programm sehr viele Daten aus verschiedenen Websocket Abfragen. Da die Anzahl der Daten zwischen keinen und sehr vielen variiert und ich von den sehr vielen nur bestimmte auslese wollte ich es mir einfach machen und einfach alle Daten per *args zu übergeben. Ich könnte natürlich die Daten vorab in einer Liste schreiben und dann die Liste an die Funktion übergeben.

Besten Dank euch beiden.
Antworten