Пожалуйста, извините мою путаницу здесь, но я прочитал документацию о функции seek() в python (после ее использования), и хотя мне это помогло, я все еще немного запутался в фактическом значении того, что он делает, объяснения очень ценятся, спасибо.
Функция seek()?
Ответ 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
.