Respostas:
No seek()
que diz respeito não há muito com que se preocupar.
Primeiro de tudo, é útil ao operar sobre um arquivo aberto.
É importante observar que sua sintaxe é a seguinte:
fp.seek(offset, from_what)
onde fp
está o ponteiro do arquivo com o qual você está trabalhando; offset
significa quantas posições você se moverá; from_what
define seu ponto de referência:
se omitido, o from_what
padrão é 0.
Nunca se esqueça de que, ao gerenciar arquivos, sempre haverá uma posição dentro desse arquivo em que você está trabalhando no momento. Quando aberta, essa posição é o início do arquivo, mas, ao trabalhar com ele, você pode avançar.
seek
será útil quando você precisar walk
acompanhar o arquivo aberto, exatamente como o caminho para o qual está viajando.
Quando você abre um arquivo, o sistema aponta para o início do arquivo. Qualquer leitura ou gravação que você fizer acontecerá desde o início. Uma seek()
operação move esse ponteiro para outra parte do arquivo, para que você possa ler ou escrever nesse local.
Portanto, se você quiser ler o arquivo inteiro, mas pular os primeiros 20 bytes, abra o arquivo seek(20)
para ir para onde deseja começar a ler e continue lendo o arquivo.
Ou diga que você quer ler cada 10 bytes, você pode escrever um loop que faz seek(9, 1)
(move 9 bytes para frente em relação às posições atuais) read(1)
(lê um byte), repita.
A seek
função espera é um deslocamento em bytes.
Portanto, se você tiver um arquivo de texto com o seguinte conteúdo:
simple.txt
abc
Você pode pular 1 byte para pular o primeiro caractere da seguinte maneira:
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]
Nota: Depois de ligar,
read
você altera a posição do cabeçote de leitura, que funciona como se fosseseek
.
Para strings, esqueça de usar WHENCE: use f.seek (0) para posicionar no início do arquivo e f.seek (len (f) +1) para posicionar no final do arquivo. Use open (arquivo, "r +") para ler / gravar em qualquer lugar do arquivo. Se você usar "a +", poderá escrever (acrescentar) no final do arquivo, independentemente de onde posicionar o cursor.
os.SEEK_SET
,os.SEEK_CUR
e,os.SEEK_END
em vez dos números mágicos0
,1
e2
, respectivamente.