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