2012-11-07 17 views
6

Se ho qualche oggetto simile a file e procedere come segue:Come funziona la funzione di ricerca di Python?

F = open('abc', 'r') 
... 
loc = F.tell() 
F.seek(loc-10) 

Cosa significa cercare di fare? Inizia all'inizio del file e leggi loc-10 byte? O è abbastanza intelligente solo per eseguire il backup di 10 byte?

risposta

9

È specifico per OS e libc. l'operazione file.seek() è delegata alla chiamata C fseek(3) per i file a livello di sistema operativo.

+0

Quindi questa piattaforma e questa implementazione sono dipendenti? – jlconlin

+0

Sì, con l'implementazione divisa tra libc e OS. –

+0

Quindi è possibile/facile farlo senza iniziare dall'inizio del file? – jlconlin

4

Dovrebbe essere abbastanza intelligente da eseguire solo il backup di 10 byte, ma suppongo che i dettagli dipendano realmente dalla libreria di file system/OS/runtime che si sta utilizzando.

Si noti che se si desidera solo eseguire il backup di 10 byte, non è necessario per tell.

F.seek(-10,1) 
+0

Grazie per aver condiviso questo. Questa è un'implementazione molto più semplice di quella che ho dato come esempio. – jlconlin

8

Secondo Python 2.7's docs:

file.seek(offset[, whence])

impostare la posizione corrente del file, come fseek di stdio(). L'argomento da cui l'argomento è facoltativo e ha come valore predefinito os.SEEK_SET o 0 (posizionamento assoluto del file ); altri valori sono os.SEEK_CUR o 1 (ricerca relativa alla posizione corrente ) e os.SEEK_END o 2 (ricerca relativa alla fine del file ).

Diciamo che vorrebbe andare 10 byte indietro rispetto alla propria posizione:

file.seek(-10, 1) 
-4

in base alla documentazione, è necessario fare f.seek(offset, from_what), o nel tuo caso, F.seek(-10, loc)

tuo esempio dovrebbe funzionare, ma questo è più esplicito

+4

Questo è abbastanza fuorviante. Questa risposta funziona solo se 'loc' è 1. – mgilson

Problemi correlati