Метод 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(), которые используются реже.