Seite 1 von 1

Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 12:52
von Nobuddy
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

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 13:20
von 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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 13:34
von Nobuddy
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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 13:42
von EyDu
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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 13:52
von Nobuddy
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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 14:20
von EyDu
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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 15:42
von Nobuddy
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?

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 16:09
von EyDu
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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Dienstag 17. April 2012, 16:17
von Nobuddy
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

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Mittwoch 18. April 2012, 02:53
von Leonidas
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.

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Mittwoch 18. April 2012, 08:01
von Nobuddy
Inzwischen ist es mir klar geworden, daß ich da Mist geschrieben habe.

Nochmals Sorry! :wink:

Grüße Nobuddy

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Mittwoch 18. April 2012, 09:32
von EyDu
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 ^^

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Mittwoch 18. April 2012, 10:46
von snafu
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... ;)

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Mittwoch 18. April 2012, 14:14
von derdon
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:

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Mittwoch 18. April 2012, 17:48
von Leonidas
derdon hat geschrieben:So stelle ich mir kanadische Foren vor :twisted:
Meinten Sie: japanische Foren?

Re: Überprüfung - Daten in Datei schreiben

Verfasst: Donnerstag 19. April 2012, 07:06
von /me
Leonidas hat geschrieben:Meinten Sie: japanische Foren?
"Haben Sie Angst vor Atomkraftwerken?" -"Ja, panische."