Seite 1 von 2
JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 15:00
von Namlus
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.....
Re: JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 15:06
von kbr
Dafür ist json nicht geeignet. In Deinem Fall dürfte sqlite das Mittel der Wahl sein.
Re: JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 17:56
von __blackjack__
Re: JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 18:11
von Namlus
kbr hat geschrieben: Freitag 6. Januar 2023, 15:06
Dafür ist json nicht geeignet. In Deinem Fall dürfte sqlite das Mittel der Wahl sein.
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.
Re: JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 18:23
von __deets__
CSV ist geeignet & quasi wie Excel.
Re: JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 22:59
von bwbg
Pack alternativ die Kontakte komplett in eine Datenstruktur und serialisiere diese nach JSON und entsprechend zurück.
Re: JSON Fortlaufend schreiben
Verfasst: Freitag 6. Januar 2023, 23:36
von nezzcarth
Namlus hat geschrieben: Freitag 6. Januar 2023, 18:11
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>
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.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 09:43
von __deets__
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.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 10:56
von snafu
Namlus hat geschrieben: Freitag 6. Januar 2023, 15:00
Die Beispieldateien ändere ich dann noch gegen variablen
Was soll das denn am Ende werden? Dieser Teil weckt den Verdacht, dass du womöglich dein Problem falsch angehst. Das weiß man aber erst genauer, wenn du mehr Background liefern würdest...
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 13:46
von shoening
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:
Code: Alles auswählen
personen= [ {
"name": "Ich",
"telefon": 12345678,
"email": "ich@test.de"
} ]
(also aus Personen ein Array von Objekten machen)
Ich hoffe, das es hilft.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 14:05
von sparrow
@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...
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 14:30
von Sirius3
@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.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 19:42
von Namlus
snafu hat geschrieben: Samstag 7. Januar 2023, 10:56
Namlus hat geschrieben: Freitag 6. Januar 2023, 15:00
Die Beispieldateien ändere ich dann noch gegen variablen
Was soll das denn am Ende werden? Dieser Teil weckt den Verdacht, dass du womöglich dein Problem falsch angehst. Das weiß man aber erst genauer, wenn du mehr Background liefern würdest...
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.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 19:45
von Namlus
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:
Code: Alles auswählen
personen= [ {
"name": "Ich",
"telefon": 12345678,
"email": "ich@test.de"
} ]
(also aus Personen ein Array von Objekten machen)
Ich hoffe, das es hilft.
Vielen Dank. Ja soweit war ich. Allerdings wenn jetzt 1 Eintrag dazukommt, dann kann ich den nicht einfach unten dazuschreiben oder?
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 19:59
von __deets__
Nein. Das geht mit JSON nicht. Geht aber mit CSV

Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 20:04
von Namlus
__deets__ hat geschrieben: Samstag 7. Januar 2023, 19:59
Nein. Das geht mit JSON nicht. Geht aber mit CSV
Ja so habe ich das jetzt auch gelöst. Ich trenne die Werte einfach mit ; und exportiere es in eine TXT.
Die kann ich mit der Kundenverwaltung dann einlesen.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 20:08
von Sirius3
@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.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 20:25
von Namlus
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.
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.
Re: JSON Fortlaufend schreiben
Verfasst: Samstag 7. Januar 2023, 21:16
von Sirius3
Wenn Du mit etwas nicht weiter kommst, kannst Du hier ja eine Frage stellen.
Re: JSON Fortlaufend schreiben
Verfasst: Sonntag 8. Januar 2023, 14:07
von nezzcarth
Namlus hat geschrieben: Samstag 7. Januar 2023, 20:25
Mit Filemaker kann ich Textdateien die mit ";" getrennt sind automatisch einlesen. - Somit erfüllt das seinen zweck. Das CSV Modul bringt mich zum verzweifeln.
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 text
basiert 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.