Учим питона сейчас. У меня есть следующая программа.

  1. Почему программа не печатает ничего после последней строки? Похоже, что «цель» не имеет никакого значения, которое было написано. (даже если я открою фактический файл, нет никаких значений это почему?

  2. Я попытался добавить эту строку над «target.close», думая, что файл не будет записан до этой строки. Это тоже не сработало. Так какова цель "target.close"?

  3. Как этот "target.truncate ()" получает эффект сразу. После этой команды, и сценарий приостанавливает ввод, если я открываю файл, я вижу все данные, которые были удалены.

from sys import argv
script, filename = argv

print (f"We are going to erase {filename}")
print ("If you don't want that, press CTRL + C")
print ("if you want that, press ENTER")
input("?  ")

print("Opening the file.......")
target = open(filename,"w+")

print("Truncating the file....")
target.truncate()
print("Finished Truncating")

print("Gimme 3 lines...")

Line1 = input("Line 1:  ")
Line2 = input("Line 2:  ")
Line3 = input("Line 3:  ")

print("Writing these lines to the file")

target.write(Line1 + "\n")
target.write(Line2 + "\n")
target.write(Line3 + "\n")


print ("Finally, we close it")
target.close

input("Do you want to read the file now?")
print(target.read())
0
Rainmaker 28 Май 2017 в 02:59

2 ответа

Лучший ответ

< Сильный > Решение

target.close отсутствует скобка, то есть должно быть target.close().

Но, глядя на ваше намерение, кажется, что вы хотите сделать target.flush(), потому что вы также пытаетесь target.read() вскоре после этого - вы не сможете прочитать файл, если закрыли его.

Почему это происходит

По умолчанию определенное количество данных, записываемых в файл, фактически сохраняется в буфере - в памяти - до того, как оно фактически записывается в файл. Если вы хотите обновить файл немедленно, вам нужно вызвать метод сброса, то есть target.flush() Вызов target.close() автоматически сбросит данные, которые были буферизованы, поэтому target.close() также обновляется файл похож на target.flush().

0
EyuelDK 28 Май 2017 в 00:15
target.close

Отсутствует скобка вызова (). Вот почему ничего не написано.

Затем, если вы хотите прочитать файл, вам нужно будет снова открыть его:

print(open(filename).read())
2
Uriel 28 Май 2017 в 00:04