Метод read() файлового объекта по умолчанию читает все содержимое файла с начала до конца, то есть с нулевого индекса до индекса, соответствующего последнему символу файла. Дополнительно данный метод может принимать целочисленный аргумент, указывающий ему, сколько символов нужно прочитать из файла.
Существует также способ доступа к файлу из произвольной позиции. Для этого используется метод seek(), для него указывается позиция, с которой следует начинать читать или записывать. Данный метод принимает целочисленный аргумент, определяющий, на сколько символов от начала файла нужно сместиться, чтобы начать определенное действие.
Текущую позицию внутри файла можно получить в любое время с помощью вызова метода файлового объекта tell(), который возвращает целочисленное значение, соответствующее порядковому номеру текущего символа текстового файла.
При работе с файловыми объектами в Python хорошей практикой является использование ключевого слова with для группировки в блок инструкций, работающих с файлом. Использование данного приема позволит вам, во-первых, убедиться в том, что файл корректно закрылся после выполнения с ним операций, даже если возникли исключения, а, во-вторых, синтаксис будет гораздо короче, чем при использовании аналогичных блоков try-except.
string = "Строка для записи в файл"+"\nВторая строка для записи в файл"
with open('example.txt', 'w') as file:
file.write(string)
print('Файл не закрыт?:' , file.closed) #Файл не закрыт?: False
print('Файл не закрыт?:', file.closed) #Файл не закрыт?: True
with open('example.txt', 'r+') as file:
string = file.read()
print('Строка:', string) #Строка: Строка для записи в файл\nВторая строка для записи в файл
print('Позиция в файле теперь:', file.tell()) #Позиция в файле теперь: 57
position = file.seek(15)
print('Позиция в файле теперь:', file.tell()) #Позиция в файле теперь: 15
file.write('1111')
file.seek(57)
file.write('2222')
file.seek(0)
string = file.read()
print('Строка:', string)
'''
Строка: Строка для запи1111 файл
Вторая строка для записи в файл2222
'''
Метод seek() способен принимать второй необязательный аргумент, значениями которого могут являться 0,1 или 2, указывающие, откуда производить отсчет символов — от начала, от текущего символа либо от конца текста соответственно. Ноль является значением по умолчанию.