Python 3, методы open (), read () и write () - PullRequest
0 голосов
/ 11 октября 2018
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 ()).Если я закрою target перед этой строкой и создам новую переменную, например, скажем txt = open (filename, 'r +') и затем напечатаю (txt.read ()), это сработает.Кто-нибудь может объяснить, почему это не работает, как я сделал это выше?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Когда вы пишете и читаете что-то в файле, вы меняете указатель файла.В этом случае вы читаете последнюю позицию в файле.

Вы можете добавить эту строку перед read (), который изменит указатель на первую позицию в файле.

target.seek(0)
0 голосов
/ 11 октября 2018

Похоже, это работает для меня.

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")
0 голосов
/ 11 октября 2018

Думайте о работе с файлами как о двух указателях: один - это переменная для самого файла, а второй - как указатель на то место в файле, в котором вы сейчас находитесь.

Сначала target.truncateфайл, чтобы очистить содержимое, указатель находится на первом символе в файле.

Затем вы даете 3 target.write команд, на которые указатель будет перемещаться в конец каждой строки по завершении этой команды.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...