È possibile caricare il file in una stringa e cercare quella stringa per la sequenza di byte 0xffc0
utilizzando il metodo str.find()
. Funziona per qualsiasi sequenza di byte.
Il codice per eseguire questa operazione dipende da un paio di cose. Se apri il file in modalità binaria e stai usando Python 3 (entrambi sono probabilmente le migliori pratiche per questo scenario), dovrai cercare una stringa di byte (al contrario di una stringa di caratteri), il che significa che tu prefisso la stringa con b
.
with open(filename, 'rb') as f:
s = f.read()
s.find(b'\xff\xc0')
Se si apre il file in modalità testo in Python 3, che avrebbe dovuto cercare una stringa di caratteri:
with open(filename, 'r') as f:
s = f.read()
s.find('\xff\xc0')
anche se non c'è nessun motivo particolare per farlo. Non ti dà alcun vantaggio rispetto al modo precedente, e se ti trovi su una piattaforma che tratta file binari e file di testo in modo diverso (ad esempio Windows), c'è la possibilità che ciò possa causare problemi.
Python 2 non fa la distinzione tra stringhe di byte e stringhe di caratteri, quindi se si sta utilizzando quella versione, non importa se si include o si esclude lo b
in b'\xff\xc0'
. E se la tua piattaforma tratta file binari e file di testo in modo identico (ad esempio Mac o Linux), non importa se si utilizza 'r'
o 'rb'
come modalità file. Ma raccomanderei comunque di usare qualcosa come il primo esempio di codice sopra solo per compatibilità diretta - nel caso in cui dovessi passare a Python 3, è una cosa in meno da risolvere.
fonte
2010-07-10 00:48:58
hai mai guardato nell'immaginario? IIRC c'è anche una libreria python per questo. – txwikinger
Ho, e funziona benissimo, ma è abbastanza pesante per trovare solo le dimensioni del file. – Parand
dovresti usare un modulo appropriato per qualcosa di simile a questo http://snippets.dzone.com/posts/show/1021 –