Стоит ли открывать файл несколько раз, чтобы прочитать его?


У меня есть следующий скрипт Python. Я заметил, что я должен open() файл каждый раз после read() или write(). Это потому, что файл закрывается автоматически после таких операций?

text_file = open('Text.txt','r')
print 'The file content BEFORE writing content:'
print text_file.read()
text_file = open('Text.txt','a')
text_file.write(' add this text to the file')
print 'The file content AFTER writing content:'
text_file = open('Text.txt','r')
print text_file.read()

Спасибо.

2 2

2 ответа:

Открыть в режиме r+ и seek(0):

with open('Text.txt', 'r+') as text_file:
    print 'The file content BEFORE writing content:'
    print text_file.read()
    text_file.write(' add this text to the file')
    print 'The file content AFTER writing content:'
    text_file.seek(0)
    print text_file.read()

Отпечатки пальцев:

The file content BEFORE writing content:
abc
The file content AFTER writing content:
abc add this text to the file

В документах есть детали:

'+ ' открыть файл на диске для обновления (чтения и записи)

Seek () позволяет перемещаться по файлу:

Измените положение потока.

Измените положение потока на заданное смещение байта. Смещение есть интерпретируется относительно позиции, указанной откуда. Ценности для чего:

  • 0 -- начало потока (по умолчанию); смещение должно быть нулевым или положительным
  • 1 - текущее положение потока; смещение может быть отрицательным
  • 2-Конец потока; смещение обычно отрицательное

Верните новое абсолютное положение.

Это потому, что файл закрывается автоматически после таких операций?

Нет. Файл уже открыт и не был закрыт явно. Но когда вы читаете файл, позиция файла переходит в конец файла.

И вы не можете записать файл, если он открыт только для чтения (r). Вы должны открыть файл в режиме write: (w/a/r+/wb). Прочитав файл, вы можете переместить его положение с помощью метода seek() объекта file.

Также, если вы откроете файл используя функцию open, Вы должны явно закрыть файл. Вы можете использовать:

with open('Text.txt', 'r') as text_file:
    # your code

Это закроет файл после выполнения блока кода.