Hallo, ich möchte meine daten gerne Fortlaufend in eine Json datei schreiben.
JSON da ich die in einem anderen Programm auslesen und weiterbearbeiten kann. Die Beispieldateien ändere ich dann noch gegen variablen, im ersten schritt geht es mir jedoch darum dass ich es schaffe die Datei zu erstellen.
Ich habe folgen Code:
import json
personen= {
"name": "Ich",
"telefon": 12345678,
"email": "ich@test.de"
}
with open("./kontakte.json", "w") as write_file:
json.dump(personen, write_file, )
Jedesmal wenn ich einen neuen Kontakt anlege möchte ich dass er in die Datei kontakte geschrieben wird. Und zwar fortlaufend. Wie schreibe ich da meinen Code um.....
JSON Fortlaufend schreiben
- __blackjack__
- User
- Beiträge: 13123
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Oder JSON Lines: https://jsonlines.org/
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Daran habe ich auch schon gedacht, aber da wäre für mich fast excel pratischer. Das ist mir allerdings zu "kompliziert". Ich setze mich gerade erst mit Python auseinander. Ich suche eine "einfache" Lösung. Ich habe ja nur 4 Spalten ich dachte schon daran diese ähnlich wie bei css
<zeitstemel>
<spalte1> Bli Bla Blub </spalte1>
<spalte2> Tätäräää </spalte2>
<zeitstempel>
usw. einfach in eine Textdatei zu schreiben, das wäre einfach und ohne viele Fehler einzulesen.
Und ne Textdatei kann ich soweit ich gesehen habe ja fortlaufend schreiben.
Das ist kein CSS sondern (fehlerhaftes) XML. Wenn man das korrekt erzeugen möchte (d.h. programmatisch mit einer geeigneten Bibliothek), ist das von den bisher vorgeschlagenen Varianten die komplizierteste und aufwendigste, die für den genannten Anwendungszweck zudem keinerlei Vorteile hat. Und weil du es ansprichst: XML-Dateien sollte man auch nie wie reine Textdateien behandeln, auch wenn sie oberflächlich so aussehen mögen; damit handelt man sich wirklich nur Probleme ein. Wenn es in die Richtung gehen soll, wäre JSON bzw. JSON-Lines die bessere und modernere Alternative. An sich würde ich aber den Vorschlag, CSV zu verwenden, unterstützten.
XML ist genauso ungeeignet für laufende Dateien wie JSON. Und wenn’s bei dir noch nicht mal für die Nutzung des CSV-Moduls reicht, dann kommst du erst recht nicht mit hintereinander geschriebenen, verschachtelten Dokumenten aus.
Hallo,
von Deiner Beschreibung würde ich annehmen, dass „Fortlaufend“ nicht technisch (im Sinne eines Streams) gemeint ist.
Wenn es Dir um eine (kleine: max. 100 Einträge) Datei z.B. mit privaten Kontakten geht, würde ich auch zu einer JSON Lösung greifen.
Dann solltest Du das folgendermaßen ändern:
(also aus Personen ein Array von Objekten machen)
Ich hoffe, das es hilft.
von Deiner Beschreibung würde ich annehmen, dass „Fortlaufend“ nicht technisch (im Sinne eines Streams) gemeint ist.
Wenn es Dir um eine (kleine: max. 100 Einträge) Datei z.B. mit privaten Kontakten geht, würde ich auch zu einer JSON Lösung greifen.
Dann solltest Du das folgendermaßen ändern:
Code: Alles auswählen
personen= [ {
"name": "Ich",
"telefon": 12345678,
"email": "ich@test.de"
} ]
Ich hoffe, das es hilft.
@shoening: Woran machst du denn die 100 Einträge fest? Und wie wird denn hier ein weiterer Eintrag an die Datei "angehängt"? Das letzte Zeichen in deiner Datei schließ ja das Array ab. Und der TE möchte ja mit jedem neuen Eintrag die Datei erweitern...
@sparrow: shoening meint wahrscheinlich, dass es bei kleinen Datenmengen keinen Unterschied macht, ob nun die komplette Datei gelesen und neu geschrieben wird, oder ob wirklich angehängt wird. Bei 4000 Bytes die ein Sektor typischerweise hat und einer Durchschnittsgrösse von 40 Zeichen pro Eintrag ist die Grenze 100 Einträge.
Am Ende will ich unterschiedlichste Daten in unsere Kundenverwaltung einlesen. z.B. beginnend damit dass ich die Telefonbücher abgleiche (Damit fange ich klein an). Das prinzip ist ja immer das selbe, und in naher zukunft will ich auch die kompletten Emails importieren. Dazu muss ich aber erst mal eine Möglichkeit finden die Daten in ein importierbares Format zu schreiben.
Also, klein anfangen und dann darauf aufbauen. Jetzt geht es erst mal darum, dass ich es schaffe die Ersten Daten von A -> B zu bringen. Da mache ich Schritt für schritt. Ich probiere alles in "Beispieldateien aus" und wenn ein Schritt funktioniert, schreibe ich ihn bei dem eigentlichen Programm dazu.
Vielen Dank. Ja soweit war ich. Allerdings wenn jetzt 1 Eintrag dazukommt, dann kann ich den nicht einfach unten dazuschreiben oder?shoening hat geschrieben: ↑Samstag 7. Januar 2023, 13:46 Hallo,
von Deiner Beschreibung würde ich annehmen, dass „Fortlaufend“ nicht technisch (im Sinne eines Streams) gemeint ist.
Wenn es Dir um eine (kleine: max. 100 Einträge) Datei z.B. mit privaten Kontakten geht, würde ich auch zu einer JSON Lösung greifen.
Dann solltest Du das folgendermaßen ändern:
(also aus Personen ein Array von Objekten machen)Code: Alles auswählen
personen= [ { "name": "Ich", "telefon": 12345678, "email": "ich@test.de" } ]
Ich hoffe, das es hilft.
@Namlus: »unterschiedlichste Daten in unsere Kundenverwaltung« hört sich eher danach an, als ob Du tatsächlich mit einer Datenbank wie SQLite besser beraten wärst.
Daten zu schreiben, ist ja nur der eine Teil, wie sollen denn die Daten einmal verarbeitet werden? Was soll damit gemacht werden?
Nein, CSV ist keine einfache Text-Datei. Benutze dafür das csv-Modul.
Daten zu schreiben, ist ja nur der eine Teil, wie sollen denn die Daten einmal verarbeitet werden? Was soll damit gemacht werden?
Nein, CSV ist keine einfache Text-Datei. Benutze dafür das csv-Modul.
Die Daten werden in eine Filemaker Datenbank geschrieben. Mit Filemaker kann ich Textdateien die mit ";" getrennt sind automatisch einlesen. - Somit erfüllt das seinen zweck. Das CSV Modul bringt mich zum verzweifeln.Sirius3 hat geschrieben: ↑Samstag 7. Januar 2023, 20:08 @Namlus: »unterschiedlichste Daten in unsere Kundenverwaltung« hört sich eher danach an, als ob Du tatsächlich mit einer Datenbank wie SQLite besser beraten wärst.
Daten zu schreiben, ist ja nur der eine Teil, wie sollen denn die Daten einmal verarbeitet werden? Was soll damit gemacht werden?
Nein, CSV ist keine einfache Text-Datei. Benutze dafür das csv-Modul.
Das geht so lange gut, wie z.B. kein Semikolon als regulärer Feldinhalt und auch keiner der anderen Sonderfälle auftritt. Das CSV Modul kümmert sich um so etwas. Die Einfachheit, die du dir scheinbar wünschst, wird es bei dem Anwendungsfeld, das du beschrieben hast, so nicht geben. Sobald man Daten strukturiert in eine Datei schreiben und strukturiert wieder herausbekommen möchte, ist das ein Dateiformat, das natürlich auch textbasiert sein kann. Und für die üblichen Formate, die dir ja vorgeschlagen wurden, gibt es existierende Bibliotheken, die man verwenden sollte, weil man es selbst eher nicht sauber implementieren wird. Da hilft nur, sich die Zeit zu nehmen und sich da einzuarbeiten. Alles andere wird nur Probleme machen und am Ende mehr Zeit beanspruchen.