Сообщить об ошибке.

Краткий обзор методов управления указателем чтения/записи в файле

Метод fp.tell() возвращает целое число, указывающее текущую позицию указателя чтения/записи в файле в виде количества байтов от начала файла, если он открыт в двоичном режиме и непрозрачного числа, если он открыт в текстовом режиме.

Чтобы изменить положение указателя чтения/записи объекта файла, используйте fp.seek(offset, whence). Положение вычисляется на основе добавления смещения к контрольной точке, контрольная точка выбирается аргументом whence. Значение 0 указывает на начало файла, 1 - использует текущую позицию указателя, и 2 - используют конец файла в качестве точки отсчета. Значение whence может быть опущено и по умолчанию равно 0, используя начало файла в качестве контрольной точки.

>>> fp = open('workfile', 'rb+')
>>> fp.write(b'0123456789abcdef')
# 16

# Перейти к 6-му байту в файле
>>> fp.seek(5)
# 5
>>> fp.read(1)
# b'5'

# Перейти к 3-му байту с конца
>>> fp.seek(-3, 2)
# 13
>>> fp.read(1)
# b'd'

Для более точного понимания как работает метод file.seek() для файлов, открытых в двоичном режиме, смотрим таблицу ниже:

ОперацияЗначение
f.seek(0)Переместить указатель в начало файла
f.seek(5)Переместить указатель на пять символов вперед от начала файла.
f.seek(0, 2)Переместить указатель файла в конец файла
f.seek(5, 1)Переместить указатель файла на пять символов вперед от текущей позиции.
f.seek(-5, 1)Переместить указатель файла на пять символов назад от текущей позиции.
f.seek(-5, 2)Переместить указатель файла на пять символов назад от конца файла.

Для файлов, открытых в текстовом режиме (тех, которые открыты без 'b' в строке mode функции open()) разрешены только запросы относительно начала файла (или быстрое перемещение указателя в конец файла с помощью fp.seek(0, 2)). Допустимыми значениями смещения offset от начала файла являются те, которые возвращаются из fp.tell() или 0. Любое другое значение смещения приводит к неопределенному поведению.

Файловые объекты имеют некоторые дополнительные методы, такие как fp.isatty() и fp.truncate(), которые используются реже.