Функция seek()?

Пожалуйста, извините мою путаницу здесь, но я прочитал документацию о функции seek() в python (после ее использования), и хотя мне это помогло, я все еще немного запутался в фактическом значении того, что он делает, объяснения очень ценятся, спасибо.

Ответ 1

Относительно seek() не о чем беспокоиться.

Прежде всего, это полезно при работе над открытым файлом.

Важно отметить, что его синтаксис выглядит следующим образом:

fp.seek(offset, from_what)

где fp - указатель файла, с которым вы работаете; offset означает, сколько позиций вы будете перемещать; from_what определяет вашу точку отсчета:

  • 0: означает, что ваша контрольная точка начало файла
  • 1: означает, что ваша контрольная точка - это текущая позиция файла
  • 2: означает, что ваша контрольная точка конец файла

если опущено, from_what по умолчанию 0.

Никогда не забывайте, что при управлении файлами всегда будет позиция внутри того файла, в котором вы сейчас работаете. Когда вы просто открываете, эта позиция является началом файла, но по мере того, как вы работаете с ней, вы можете продвигаться.
seek будет полезен вам, когда вам понадобится walk вдоль этого открытого файла, как путь, по которому вы путешествуете.

Ответ 2

Когда вы открываете файл, система указывает на начало файла. Любое чтение или запись, которые вы делаете, будут происходить с самого начала. Операция seek() перемещает этот указатель на какую-либо другую часть файла, чтобы вы могли читать или писать в этом месте.

Итак, если вы хотите прочитать весь файл, но пропустите первые 20 байтов, откройте файл, найдите (20), чтобы перейти туда, где вы хотите начать чтение, а затем продолжайте чтение файла.

Или скажите, что вы хотите читать каждый 10-й байт, вы можете написать цикл, который ищет (9, 1) (перемещает 9 байт вперед относительно текущих позиций), читает один байт, повторяется.

Ответ 3

Функция seek ожидает смещение в байтах.

Пример файла Ascii:

Поэтому, если у вас есть текстовый файл со следующим содержимым:

simple.txt

abc

Вы можете перепрыгнуть 1 байт, чтобы пропустить первый символ следующим образом:

fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc

Ширина набора примерных двоичных файлов:

fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]

Примечание. После того, как вы звоните в режим read вы меняете положение считывающего устройства, которое действует как seek.