Überprüfung - Daten in 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
Nobuddy
User
Beiträge: 1023
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
erstelle ich eine Datei mit bestimmten Dateninhalt und versuche anschließend nochmals, mit dem gleichen Dateninhalt die Datei zu erstellen, wird unter Verwendung des CSV-Moduls, die Datei nicht erneut beschrieben, was ja auch ok ist.

Code: Alles auswählen

# Schreibe die Daten von datenpool in filename
def write_csv(filename, datenpool):
    with open(filename, "w") as zielfile:
        writer = csv.writer(zielfile, delimiter="\t", quotechar="^")
        writer.writerows(datenpool)

Code: Alles auswählen

write_csv(filename, datenpool)
Ich überlege mir nun, ob und wie es möglich ist zu überprüfen, ob die Datei mit neuen Daten beschrieben wird, oder ob nicht.

Gibt es da eine einfache Möglichkeit?

Grüße Nobuddy
deets

Wie kommst du darauf, dass die Datei nicht nochmal beschrieben wird? Natürlich wird die dass. Das OS kann doch nicht wissen, dass du 2mal dasselbe schreibst.

Zur Überprüfung mag mtime geeignet sein, Schau dir mal os.stat an.
Nobuddy
User
Beiträge: 1023
Registriert: Montag 30. Januar 2012, 16:38

deets hat geschrieben:Wie kommst du darauf, dass die Datei nicht nochmal beschrieben wird? Natürlich wird die dass. Das OS kann doch nicht wissen, dass du 2mal dasselbe schreibst.
Weil es das nicht tut!
Beispiel:

Code: Alles auswählen

my_reader = partial(csv.reader, delimiter='\t', quotechar='^')

daten = list()
with open(liste_hersteller_kurz_ean_path, "r") as infile:
    for r in my_reader(infile):
        zeile = (r[0], r[1])
        daten.append(zeile)

daten = sorted(set(daten))
wert = len(daten)
print(wert)
write_csv(liste_hersteller_kurz_ean_path, daten)
deets hat geschrieben:Zur Überprüfung mag mtime geeignet sein, Schau dir mal os.stat an.
Schaue ich mir mal an, glaube aber nicht, daß das ist was ich suche.
Ich suche eigentlich eine Überprüfung auf den Schreibvorgang direkt.
So etwas in der Art:

Code: Alles auswählen

if write_csv(liste_hersteller_kurz_ean_path, daten) == True:
    print('ja')
else:
    print('nein')
was aber nicht funktioniert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wie deet schon geschrieben hat, brauchst du nicht zu prüfen ob etwas geschrieben wurde. Da läuft nichts im Hintergrund ab, was irgendwie magisch mal schreibt und mal nicht. Ich würde vermuten, dass du entweder die Datei nicht korrekt schließt, du gar nicht das zweite mal Schreiben erreichst oder aber, dass du die Daten falsch zum Speichern gibst. Einen abgelaufenen Iterator oder ähnliches.

Edit: ``x == True`` ist total überflüssig und sollte einfach als ``x`` geschrieben werden, da ``x`` bereits ein Wahrheitswert ist.
Das Leben ist wie ein Tennisball.
Nobuddy
User
Beiträge: 1023
Registriert: Montag 30. Januar 2012, 16:38

Ich weiß, daß das ``x == True`` überflüssig ist, habe es nur verwendet, um es zu verdeutlichen.

Das Beispielkonstrukt, hat keinen Fehler und funktioniert tadellos.
Ich verwende das csv-Modul und das überprüft vor dem Schreiben die Datei, so wie ich weiß und bei identischen Daten, erfolgt kein Schreibvorgang.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nobuddy hat geschrieben:Ich verwende das csv-Modul und das überprüft vor dem Schreiben die Datei, so wie ich weiß und bei identischen Daten, erfolgt kein Schreibvorgang.
Deine Aussage ist doch vollkommener Unfug und lässt sich mit wenigen Zeilen leicht widerlegen:

Code: Alles auswählen

>>> import os
>>> import csv
>>> data = [map(str, range(5)) for _ in range(10)]
>>> with open("test.csv", "w") as fp:
...     writer = csv.writer(fp)
...     writer.writerows(data)
... 
>>> os.stat("test.csv")                                                                                   
posix.stat_result(st_mode=33188, st_ino=1966785, st_dev=2066L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=110, st_atime=1334668542, st_mtime=1334668542, st_ctime=1334668542)
>>> with open("test.csv", "w") as fp:                                                                     
...     writer = csv.writer(fp)                                                             
...     writer.writerows(data)                                                              
...                                                                                                       
>>> os.stat("test.csv")                                                                     
posix.stat_result(st_mode=33188, st_ino=1966785, st_dev=2066L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=110, st_atime=1334668542, st_mtime=1334668578, st_ctime=1334668578)
Die selben Daten, die selbe Datei, aber verschiedene Zeitstempel.
Das Leben ist wie ein Tennisball.
Nobuddy
User
Beiträge: 1023
Registriert: Montag 30. Januar 2012, 16:38

EyDu, Ja der Zeitstempel der Datei wird neu gesetzt aber es wird nicht in die Datei geschrieben.

Meine Begründung:
Ich habe die betreffende Datei mit kate geöffnet.
Werden Daten in der Datei geändert, so wird diese neu geschrieben und ein Fenster in kate, informiert über die Änderung in der Datei.
Wird der Inhalt der Datei nicht geändert, wie in meinem Beispiel, so gibt es auch von kate keine Info über eine Änderung der Datei.
Betrachte ich aber die Datei, erkenne ich die Änderung des Zeitstempels.

Bin ich jetzt völlig daneben, oder gibt es dafür eine Erklärung?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nobuddy hat geschrieben:Bin ich jetzt völlig daneben, oder gibt es dafür eine Erklärung?
Und du bist noch nicht auf die Idee gekommen, dass vielleicht Kate die Ursache ist, weil es vielleicht erst prüft ob der Inhalt sich unterscheidet und nur dann wenn es notwendig ist eine Meldung zeigt ;-) Das kann man übrigens mit zwei Zeilen auf der Konsole testen.
Das Leben ist wie ein Tennisball.
Nobuddy
User
Beiträge: 1023
Registriert: Montag 30. Januar 2012, 16:38

EyDu hat geschrieben:Und du bist noch nicht auf die Idee gekommen, dass vielleicht Kate die Ursache ist, weil es vielleicht erst prüft ob der Inhalt sich unterscheidet und nur dann wenn es notwendig ist eine Meldung zeigt ;-) Das kann man übrigens mit zwei Zeilen auf der Konsole testen.
Hm, könnte natürlich sein ... habe es auch mit OO Writer versucht, hier auch das Gleiche. Wenn dies so ist, bin ich von einer falschen Voraussetzung aus gegangen. :K

Sorry und Grüße
Nobuddy
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nobuddy hat geschrieben:Hm, könnte natürlich sein ... habe es auch mit OO Writer versucht, hier auch das Gleiche. Wenn dies so ist, bin ich von einer falschen Voraussetzung aus gegangen. :K
Und du erwartest echt, dass Kate oder OO Writer dir sagen "Hey, die Datei wurde geändert und es gibt keine Änderungen, möchtest du die Datei neu laden?" Ich würde es als Bug ansehen, wenn sie mich mit sinnlosen Meldungen belästigen würden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Nobuddy
User
Beiträge: 1023
Registriert: Montag 30. Januar 2012, 16:38

Inzwischen ist es mir klar geworden, daß ich da Mist geschrieben habe.

Nochmals Sorry! :wink:

Grüße Nobuddy
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du musst dich doch nicht immer entschuldigen. Du hattest ein Problem, dessen Lösung sich dir nicht gleich erschloss und hast daher hier nachgefragt und entsprechende Hinweise bekommen. Wenn man sich hier bei jeder Frage entschuldigen müsste, dann wäre das schon ein sehr seltsames Forum ^^
Das Leben ist wie ein Tennisball.
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Leonidas hat geschrieben:
Nobuddy hat geschrieben:Hm, könnte natürlich sein ... habe es auch mit OO Writer versucht, hier auch das Gleiche. Wenn dies so ist, bin ich von einer falschen Voraussetzung aus gegangen. :K
Und du erwartest echt, dass Kate oder OO Writer dir sagen "Hey, die Datei wurde geändert und es gibt keine Änderungen, möchtest du die Datei neu laden?" Ich würde es als Bug ansehen, wenn sie mich mit sinnlosen Meldungen belästigen würden.
Wobei eine naiv implementierte Prüfung durchaus einfach nach dem Zeitstempel der Datei gehen könnte und darauf basierend dann behaupten könnte, die Datei sei geändert worden. Ganz so abwegig finde ich das garnicht mal. Ein Prüfen des Inhalts ist aber natürlich schöner.

Wie dem auch sei: Schlussfolgerungen zu ziehen, die auf beobachtetem Verhalten anderer Programme beruhen, ist - wie sich gezeigt hat - mit Vorsicht zu genießen... ;)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

EyDu hat geschrieben:Du musst dich doch nicht immer entschuldigen. Du hattest ein Problem, dessen Lösung sich dir nicht gleich erschloss und hast daher hier nachgefragt und entsprechende Hinweise bekommen. Wenn man sich hier bei jeder Frage entschuldigen müsste, dann wäre das schon ein sehr seltsames Forum ^^
So stelle ich mir kanadische Foren vor :twisted:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

derdon hat geschrieben:So stelle ich mir kanadische Foren vor :twisted:
Meinten Sie: japanische Foren?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Leonidas hat geschrieben:Meinten Sie: japanische Foren?
"Haben Sie Angst vor Atomkraftwerken?" -"Ja, panische."
Antworten