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: 13998
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Oder JSON Lines: https://jsonlines.org/
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
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 csskbr 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.
<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.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>
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.
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...Namlus hat geschrieben: Freitag 6. Januar 2023, 15:00 Die Beispieldateien ändere ich dann noch gegen variablen
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.snafu hat geschrieben: Samstag 7. Januar 2023, 10:56Was 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...Namlus hat geschrieben: Freitag 6. Januar 2023, 15:00 Die Beispieldateien ändere ich dann noch gegen variablen
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.
Ja so habe ich das jetzt auch gelöst. Ich trenne die Werte einfach mit ; und exportiere es in eine TXT.__deets__ hat geschrieben: Samstag 7. Januar 2023, 19:59 Nein. Das geht mit JSON nicht. Geht aber mit CSV![]()
Die kann ich mit der Kundenverwaltung dann einlesen.
@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.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.