Стоит ли открывать файл несколько раз, чтобы прочитать его?
У меня есть следующий скрипт 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 ответа:
Открыть в режиме
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
Это закроет файл после выполнения блока кода.