Відповіді:
Стосовно seek()цього не надто багато хвилюватися.
Перш за все, це корисно при роботі над відкритим файлом.
Важливо зазначити, що його синтаксис такий:
fp.seek(offset, from_what)
де fpвказівник на файл, з яким ви працюєте; offsetозначає, скільки позицій ви будете рухати; from_whatвизначає точку відліку:
якщо пропущено, from_whatза замовчуванням до 0.
Ніколи не забувайте, що під час керування файлами, у ньому завжди буде місце, де ви працюєте. Щойно відкрийте, це місце є початком файлу, але працюючи з ним, ви можете просунутися.
seekстане в нагоді вам, коли вам потрібно пройти walkцей відкритий файл, як шлях, який ви проїжджаєте.
Коли ви відкриваєте файл, система вказує на початок файлу. Будь-яке читання або запис, яке ви робите, відбуватиметься з самого початку. А seek()операція переміщує цей покажчик на яку - або іншу частину файлу , так що ви можете читати або писати на цьому місці.
Отже, якщо ви хочете прочитати весь файл, але пропустити перші 20 байтів, відкрийте файл, seek(20)щоб перейти до місця, де ви хочете почати читання, а потім продовжте з читанням файлу.
Або скажіть, що ви хочете прочитати кожен 10-й байт, ви можете написати цикл, який робить seek(9, 1)(переміщує 9 байт вперед відносно поточних позицій), read(1)(читає один байт), повторити.
seekФункція Чекайте наведені зміщення в байтах.
Тож якщо у вас є текстовий файл із таким вмістом:
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.
Для рядків забудьте про використання WHENCE: використовуйте f.seek (0) для позиціонування на початку файлу, а f.seek (len (f) +1) для позиціонування в кінці файлу. Використовуйте відкритий (файл, "r +") для читання / запису будь-де у файлі. Якщо ви використовуєте "+", ви зможете записувати (додавати) лише в кінці файлу, незалежно від місця розташування курсору.
os.SEEK_SET,os.SEEK_CURіos.SEEK_ENDзамість магічних чисел0,1і2, відповідно.