Datensätze in .txt- oder .csv Datei schreiben?

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
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Vielen Dank für die Antworten zu meinen Fragen über Werteübergaben in Schleifen. :)
Ich habe gerade in einem Lehrbuch nachgeschlagen und herausgefunden, dass ich die Daten der 4 Mannschaften (Mannschaftsnummer und Mannschaftsname) als Datensatz in eine Zeile in eine eigene Datei schreiben muss. Am Ende jedes Datensatzes muss \n stehen. Daran erkennt Python das Ende eines Datensatzes.
Ich habe hier nur die Frage, was in meinem Fall besser ist. Soll ich die Datensätze in eine .txt-Datei oder eine .csv Datei schreiben?
Als nächstes werde ich versuchen, die Enumerate-Funktion zu verwenden und eine Funktion für das schreiben der Datei zu generieren.
Nach oben
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: Manschaftsnummer im Sinne von einer laufenden Nummer die hochgezählt wird, die man also beim einlesen wieder generieren könnte, sollte eher nicht mit gespeichert werden.

Wenn Du eine CSV-Datei schreibst oder liest, dann nimm das `csv`-Modul aus der Standardbibliothek zum schreiben und bastele nichts selbst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was heißt denn du "musst" die als CSV-Datei speichern. Das kann man machen, aber ob man das muss, hängt eher vom Anwendungsfall ab. Vielleicht ist auch eine Datenbank angebrachter.

Edit: __blackjack__, herzlichen Glückwunsch zu 5555 Beiträgen auf dem Account.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Am Ende jedes Datensatzes muss \n stehen. Daran erkennt Python das Ende eines Datensatzes.
Nee, \n ist ein Zeilenende unter *nix-Systemen. Wenn eine Zeile = ein Datensatz dann hast du recht. Aber nur, weil das dann deiner Konvention entspricht und nicht, weil das global immer und überall so sein muss.
Ich habe hier nur die Frage, was in meinem Fall besser ist. Soll ich die Datensätze in eine .txt-Datei oder eine .csv Datei schreiben?
Das sind beides textbasierte-Dateien. Die Dateiendung ist dabei auch ziemlich Latte, weil es darum geht, wie der Text / die Daten in der Datei aufgeteilt sind. Bei CSV-Dateien sollte es halte einen Feldtrenner geben, der die Daten trennt und die Aufteilung erlaubt. Auch mit dem CSV-Modul kannst du eine .txt Datei lesen, wenn der Inhalt passt.
Genau so kannst du eine CSV-Datei "händisch" lesen und dann manuell am Feldtrenner trennen. Macht man aber i.d.R. nicht, weil das CSV-Modul da einfacher ist.

Und bei strikt strukturierten Daten macht eine Datenbank wie SQLite ggf. in der Tat Sinn. Vorteil: du kannst gezielt Daten lesen (und schreiben), ohne jedes Mal die volle Datenmenge einlesen zu müssen.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Aaaalso das Datensatzende bei CSV wird durch "\r\n" gekennzeichnet. Deswegen ist es auch so wichtig das Dateien für CSV mit ``newlines=""`` geöffnet werden, damit das "\r\n" auch garantiert so in der Datei landet, egal welches Betriebssystem man verwendet.

Umgekehrt gilt übrigens nicht das "\r\n" das Ende eines Datensatz kennzeichnet. Denn "\r\n" steht zwar am Ende jedes Datensatzes, kann aber auch *in* Werten *innerhalb* eines Datensatzes vorkommen. Das ist einer der Gründe warum man CSV-Dateien besser mit dem passenden Modul verarbeitet, denn so einfach wie es auf den ersten Blick aussieht, ist das Format dann letztlich doch nicht. Das selbst, ohne Modul zu verarbeiten bedeutet in der Regel, das man nur eine Untermenge vom CSV-Format erlaubt wo man davon ausgeht das eine Zeile = ein Datensatz ist, und dass das Trennzeichen selbst nicht in Werten vorkommen darf.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Welches Modul wäre das passende?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@__blackjack__:
Aaaalso das Datensatzende bei CSV wird durch "\r\n" gekennzeichnet.
Auch unter unixoiden Systemen, wo `\n` der Newline Character ist? IMHO ist `\r\n` ist doch "nur" Windows.

@Bill987654321: das csv-Modul, was Python an Bord hat. Steht aber auch weiter oben in einen Post von __blackjack__.

Gruß, noisefloor
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

@noisefloore: Ja, auch unter Unices.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@noisefloor: Das ist ja der Grund warum man ``newlines=""`` angeben sollte. Unter Linux wäre das Wurst, aber unter Windows würde sonst aus dem "\r\n" in der Datei ein "\r\r\n" werden, weil dort das "\n" noch mal durch ein "\r\n" ersetzt würde.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

__blackjack__ hat geschrieben: Dienstag 7. April 2020, 12:26 @noisefloor: Das ist ja der Grund warum man ``newlines=""`` angeben sollte. Unter Linux wäre das Wurst, aber unter Windows würde sonst aus dem "\r\n" in der Datei ein "\r\r\n" werden, weil dort das "\n" noch mal durch ein "\r\n" ersetzt würde.
:D :D :D Das freut mich, das mal eine meiner Anfänger-Fragen auch bei Profis zur Erweiterung des Wissens beigetragen hat. :D :D :D
Antworten