Відповіді:
Стосовно 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
, відповідно.