from sys import argv
script, filename = argv
print ("We're going to erase %r" % filename)
print ("If you don't want to do that, press CTRL-C (^C)")
print ("If you do want that, hit RETURN.")
input("?")
print ("Opening the file...")
target = open(filename, 'r+')
print ("Truncating the file. Goodbye!")
target.truncate()
print ("Enter two lines: ")
line1 = input("Line 1: ")
line2 = input("Line 2: ")
print ("I'm going to write those to the file")
target.write(line1)
target.write('\n')
target.write(line2)
print (target.read())
print ("Closing file")
target.close()
Когда я запускаю скрипт, компилятор действует так, как будто нет строки print (target.read ()). Если я закрываю цель перед этой строкой и создаю новую переменную, например, скажем txt = open (filename, 'r +'), а затем print (txt.read ()), она работает. Может кто-нибудь объяснить, почему это не работает, как я делал это выше?
Сначала сделал это, но потом я менял код, чтобы понять, почему эта строка не работает.






Думайте о работе с файлами как о двух указателях: один - это переменная для самого файла, а второй - как указатель на то место в файле, где вы в данный момент находитесь.
Вы сначала target.truncate файл, чтобы очистить содержимое, указатель находится на первом символе в файле.
Затем вы даете 3 команды target.write, указатель на которые переместится в конец каждой строки, когда эта команда будет завершена.
Наконец, вы пробуете target.read. В этот момент курсор находится в конце файла, и читать дальше нечего. Если вы хотите прочитать содержимое файла, вам нужно будет либо закрыть и снова открыть файл, либо выполнить target.seek(0), чтобы переместить указатель на начало файла на 0-й байт, прежде чем вы фактически выполните target.read.
Так что происходит после каждого написания? Я имею в виду, что после того, как я напишу в файл, я должен закрыть его и снова открыть?
Когда вы что-то пишете и читаете в файле, вы меняете указатель файла. В этом случае вы читаете последнюю позицию в файле.
Вы можете добавить эту строку перед read (), чтобы изменить указатель на первую позицию в файле.
target.seek(0)
Похоже, у меня это работает.
from sys import argv
script, filename = argv
print ("We're going to erase %r" % filename)
print ("If you don't want to do that, press CTRL-C (^C)")
print ("If you do want that, hit RETURN.")
input("?")
print ("Opening the file...")
with open(filename, 'w') as target:
print ("Enter two lines: ")
line1 = input("Line 1: ")
line2 = input("Line 2: ")
print ("I'm going to write those to the file")
target.write(line1)
target.write('\n')
target.write(line2)
with open(filename, 'r') as target:
print (target.read())
input ("Closing file")
Не было бы проще открыть файл как
with open(filename, 'w') as target:, который стирает все данные, записывает две входные строки, затемwith open(filename, 'r') as target:и читает?