Verhalten der truncate () -Methode in Python

8

Dies ist von Übung 16 von Zed Shaws Python-Tutorials. Mir fällt es schwer zu verstehen, was genau die Funktion truncate in diesem Fall tut. Also die Logik ist, dass wir eine Datei öffnen und dann ... verkürzen? Wofür? Was genau passiert hier?

%Vor%     
J82 13.11.2014, 19:50
quelle

2 Antworten

15

Sie haben recht, wenn Sie misstrauisch sind.

Zuerst tut file.truncate dies:

  

Kürzen Sie die Dateigröße. Wenn das optionale size Argument vorhanden ist, wird die Datei auf (höchstens) diese Größe abgeschnitten. Die Größe entspricht standardmäßig der aktuellen Position ...

Nicht ganz dasselbe wie Zeds Beschreibung - es "leert nur die Datei", wenn die aktuelle Position der Anfang der Datei ist - aber da wir gerade die Datei geöffnet haben (und nicht in a mode), ist die aktuelle Position der Anfang, also ist das nicht relevant. Wir schneiden auf eine leere Datei ab.

Was alles gut und schön ist, außer dass open dies bereits tut:

  

Die am häufigsten verwendeten Werte des Modus sind 'r' für das Lesen, 'w' für das Schreiben (die Datei wird abgeschnitten, wenn sie bereits existiert) ...

Also öffnen wir die Datei und erstellen sie, wenn sie nicht existiert, und schneiden sie auf 0 Bytes ab, wenn sie es tut. Dann, in der nächsten Zeile, schneiden wir es auf 0 Bytes ab.

(Die Meldung "Die Datei abschneiden. Auf Wiedersehen!" ist ziemlich irreführend, da wir sie bereits abgeschnitten haben. Stellen Sie sich vor, Sie hätten einen Haltepunkt in dieser Zeile gesetzt und entschieden, das Programm zu beenden, bevor Sie es ausführen ...)

Aber beachte, dass dies kein dummer Fehler von Zed ist; er scheint dies speziell getan zu haben, um den Punkt in Lernübung # 5 zu verdeutlichen:

  

Wenn du die Datei mit 'w' mode öffnest, brauchst du wirklich target.truncate() ? Lies die Dokumentation für Pythons open -Funktion und sieh nach, ob das stimmt.

    
abarnert 13.11.2014, 19:55
quelle
0

Ich gehe gerade durch Zed Shaws Buch zu. Häufig. Wenn er dir solche Probleme gibt, wird er dich dazu bringen, mit den verschiedenen Elementen deines Codes herumzuspielen, um zu sehen, was sie tun. Fühlen Sie sich frei, Dinge wie target.truncate () zu löschen und das Programm erneut auszuführen. Wie abarnert sagt, gibt es eine Möglichkeit, trunkieren nur einen Teil der Datei zu entfernen. Dieses Loch in Ihrem Wissen zu verlassen, wie Sie mit diesen beiden Optionen unterschiedliche Ergebnisse erzielen können, soll Sie dazu bringen, selbständig zu forschen. Es ist eine sehr effektive Art, den Leser mit Neugier zu infizieren. Sehen Sie sich an, wie append in Python funktioniert und sehen Sie, ob Sie truncate () nur die letzte Zeile Ihrer Testdatei entfernen können. Haben Sie keine Angst, Ihren Code zu brechen. "Wenn Sie Ihre Erfolgsquote erhöhen möchten, verdoppeln Sie Ihre Fehlerrate." (Thomas J. Watson, ehemaliger CEO von IBM)

    
derek brown 14.08.2017 11:08
quelle

Tags und Links