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

Метод file.seek() в Python, перемещает указатель в файле

Перемещает указатель чтения/записи в файле

Синтаксис:

file.seek(offset, whence=os.SEEK_SET)

Параметры:

  • file - объект файла
  • offset - int байтов, смещение указателя чтения/записи файла.
  • whence - абсолютное позиционирование указателя. Константа os.SEEK_* или целое число int.

Возвращаемое значение:

Описание:

Метод файла file.seek() устанавливает текущую позицию в байтах offset для указателя чтения/записи в файле file.

Аргумент whence является необязательным и по умолчанию равен 0. Может принимать другие значения:

  • os.SEEK_SET или 0 - означает, что нужно сместить указатель на offset относительно начала файла.
  • os.SEEK_CUR или 1 - означает, что нужно сместить указатель на offset относительно текущей позиции.
  • os.SEEK_END или 2 - означает, что нужно сместить указатель на offset относительно конца файла.

Обратите внимание:

  • Если файл открыт для добавления с помощью 'a' или 'a+', все операции file.seek() будут отменены при следующей записи.
  • Если файл открыт только для записи в режиме добавления с использованием 'a', Этот метод по существу используется, но он остается полезным для файлов, открытых в режиме добавления с включенным чтением - режим 'a+'.
  • Если файл открыт в текстовом режиме с помощью 't', то допустимы только смещения, возвращаемые функцией file.tell(). Использование других смещений вызывает неопределенное поведение.

Обратите внимание, что не все объекты файлов доступны для метода file.seek(). В текстовых файлах разрешены только запросы относительно начала файла os.SEEK_SET, исключение составляет быстрое смещение указателя на конец файла с помощью txt_file.seek(0, 2).

Примеры перемещения указателя в файле при чтении/записи.

Обратите внимание, что файл записывается в бинарном/двоичном режиме, с поддержкой чтения (mode='bw+')

>>> text = b'This is 1st line\nThis is 2nd line\nThis is 3rd line\n'
>>> fp = open('foo.txt', mode='bw+')
>>> fp.write(text)
# 51

>>> fp.seek(20, 0)
# 20
>>> fp.read(10)
# b's is 2nd l'

>>> fp.seek(10, 1)
# 40
>>> fp.read(10)
# b's 3rd line'

>>> fp.seek(-11, 2)
# 40
>>> fp.read(10)
# b's 3rd line'

>>> fp.close()

Для более точного понимания как работает метод 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. Любое другое значение смещения приводит к неопределенному поведению.