2016-04-14 10 views
0

Ich versuche, eine Datei zu öffnen, den Inhalt zu lesen, vergleichen Sie das mit einem Hash und überschreiben Sie die Datei ggf. erneut. Es sollte einfach sein, aber irgendwie kann ich es nicht zum Laufen bringen. Ich habe jetzt:Python read() funktioniert nicht

with open(name, 'wb+') as des: 
    current_content = des.read() 

Ich bin 100% sicher, dass die Datei nicht leer ist, dass ich an der richtigen Datei freu (späten Daten darauf geschrieben werden und das funktioniert), aber irgendwie current_content endet als eine leerer String.

with open(name, 'wb+') as des: 
    des.write('Test') 
    des.seek(0) 
    current_content = des.read() 

Wenn ich versuche, wird der obige current_content "Test" zurückgeben. Jeder eine Idee, was könnte dieses Verhalten verursachen?

+1

w + schneidet die Datei gemäß den open() -Dokumenten ab. – srowland

Antwort

1

Ändern Sie die Datei lesen Option wb+ zu ab+ und testen Sie es jetzt. Das Problem ist ab+ unterstützt Lesen und Anhängen der Daten (bei EOF) in einer Binärdatei gemäß Dokumentation. Wenn Sie wb+ verwenden, überschreibt es möglicherweise die vorhandene Datei.

+0

Ich bin jetzt verwirrt, weil ich dachte, der einzige Unterschied zwischen ab + und wb + ist die Position des Zeigers, Anfang oder EOF. Das Umschalten auf ab + funktionierte nicht, aber das Umschalten auf ab + UND das Setzen von seek (0), bevor ich es gelesen habe, hat es behoben. Also wenn ich recht verstehe wb überschreibt die Datei sofort beim Öffnen? – Matthieu

+0

Ich suche die gleiche Idee, dass 'wb +' die Datei beim Öffnen überschreibt. Es fällt jedoch auf, dass das Überschreiben in der Dokumentation enthalten ist. 'read' Funktion beginnt die Datei vom Ende zu lesen, wenn ich mich richtig erinnere. Also suche an den Anfang der Datei. – Mitty