file.seek(offset, whence=os.SEEK_SET)
file
- объект файлаoffset
- int
байтов, смещение указателя чтения/записи файла.whence
- абсолютное позиционирование указателя. Константа os.SEEK_*
или целое число int
.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
. Любое другое значение смещения приводит к неопределенному поведению.