2016-08-03 4 views
0

Dieser Code soll den Inhalt der Datei löschen und die neuen Strings schreiben, die der Benutzer über Terminal eingibt, aber in Wirklichkeit fügt er nur eine neue Zeile hinzu ist schon da. Ich kann es nicht scheinen, den Inhalt vollständig mit truncate() zu löschen. Wie mache ich das?Mein Code mit truncate() fügt neue Daten an, anstatt alte Daten zu ersetzen

Hinweis: es hat mit truncate() getan werden, wie es aus dem Buch eine Übung ist, und ich will nicht in die Zukunft springen und mehr fortgeschrittenen Sachen zu verwenden. Danke!

from sys import argv 
script, filename, user_name = argv 
print("Hi my dear %s... I hope you're doing great today\n" % user_name) 
print("We're going to write a string to a file %r\n" % filename) 
open_file = open(filename, 'r+') 
print("%s, this is what currently file %r has" % (user_name, filename)) 
read_file = open_file.read() 
print("File's content is:\n", read_file) 
quote = "To create, first sometime you need to destroy" 
print("\n\nAs a quote from your favourite movie says: \n\n %r" \ 
    % quote) 
print("So, we will delete the content from the file %r" \ 
    % filename) 
open_file.truncate() 
print("This is the file %r now" % filename) 
print(read_file) 

new_line = input("Now let's write something, please start here... ") 

print("now %s, let's add this line to the same file %r" \ 
    % (user_name, filename)) 
open_file.write(new_line) 
print("Closing the file") 
open_file.close() 
print(read_file) 
open_file.close() 
+0

Mehrere andere haben den besseren Weg dazu erwähnt, was wahrscheinlich eine Abkürzung für 'open_file.seek (0) ist; open_file.truncate() ', was ich immer gemacht habe. –

Antwort

2

truncate() ohne Argumente an der aktuellen Position abgeschnitten. Übergeben Sie eine Größe, um die Datei auf diese Größe zu kürzen.

+0

Gracias Ignacio – kuatroka

1

Die truncate-Methode verfügt über ein optionales size-Argument, das standardmäßig auf die aktuelle Position des Dateizeigers verweist. Da Sie read für die Datei bereits aufgerufen haben, tut truncate nichts, da die aktuelle Position das Ende der Datei ist.

Ändern Sie Ihren Anruf zu truncate(0) und es wird die Datei löschen.

+0

Vielen Dank Tzaman, ich fügte hinzu (0) und es hat wie erwartet funktioniert. Mir war der Zeiger und die benötigte Dateigröße nicht bekannt – kuatroka

Verwandte Themen