Come separare il contenuto da un file che è un contenitore per binario e altre forme di contenuto

StackOverflow https://stackoverflow.com/questions/822161

Domanda

Sto cercando di analizzare alcuni file .txt. Questi file fungono da contenitori per un numero variabile di file "figli" che vengono impostati o identificati all'interno del contenitore con tag SGML. Con Python posso facilmente separare i file dei bambini. Comunque ho problemi a riscrivere il contenuto binario come file binario (diciamo gif o jpg). Nel caso più semplice il contenitore potrebbe avere un file html incorporato seguito da un elemento grafico chiamato dall'html. Suppongo che il mio problema sia dovuto al fatto che sto leggendo il file .txt originale usando open (nome file, 'r'). Ma questa sembra l'unica opzione per trovare i tag sgml per dividere il file.

Gradirei qualsiasi aiuto per identificare del materiale di lettura pertinente.

Apprezzo i suggerimenti ma sto ancora lottando con le domande più elementari. Ad esempio, quando apro il file con WordPad e scorro verso il basso fino alla sezione contrassegnata come GIF vedo questo:

<FILENAME>h65803h6580301.gif
<DESCRIPTION>GRAPHIC
<TEXT>
begin 644 h65803h6580301.gif
M1TE&.#EA(P)I`=4@`("`@,#`P$!`0+^_OW]_?_#P\*"@H.#@X-#0T&!@8!`0
M
filerefbin=file('myfile.txt','rb')
wholeFile=filerefbin.read()
import re
graphicReg=re.compile('<DESCRIPTION>GRAPHIC')
locationGraphics=graphicReg.finditer(wholeFile)
graphicsTags=[]
for match in locationGraphics:
    graphicsTags.append(match.span())
"PL"`@('!P<)"0D#`P,%!04#\_/^_O[Y^?GZ^OK]_?WX^/C\_/SV]O;U]?

Riesco a trovare la sezione abbastanza facilmente ma da dove inizia il file gif. L'intestazione inizia con 644, gli spazi vuoti dopo l'inizio della parola o la riga che inizia con MITE?

Quindi, quando il file viene letto in Python, fa qualcosa al codice binario che deve essere annullato quando viene letto?

Riesco a trovare le linee in cui inizia la grafica:

import uu
uu.decode(r'c:\test2.txt',r'c:\test.gif')

Posso facilmente usare lo stesso processo per arrivare all'inizio della parola, o per identificare il nome file e arrivare alla fine del nome file nella "prima" riga. Sono anche arrivato alla fine del file gif incorporato. Ma non riesco a scrivere la corretta combinazione di cose, quindi quando faccio doppio clic su h65803h6580301.gif quando è stato isolato e salvato, riesco a vedere l'immagine.

È interessante notare che quando apro il file in rb, le terminazioni di linea sembrano essere ancora presenti anche se non sembrano avere alcun effetto nel blocco note. Quindi questo è chiaramente uno dei miei problemi che potrei aver bisogno di leggere e unire le righe dopo aver eliminato il \ n

Adoro questo sito e adoro PYTHON

È stato troppo facile dopo aver letto il post di Bendin. Ho solo dovuto tagliare la sezione che iniziava con la parola inizio e salvarla in un file txt e quindi eseguire il comando seguente:

<*>

Devo lavorare con alcune altre cose per il resto della giornata, ma posterò di più qui mentre guarderò più da vicino. La prima cosa che devo scoprire è come usare qualcosa di diverso da un file, cioè da quando ho letto l'intero file .txt in memoria e ho ritagliato la sezione che ha l'immagine di cui ho bisogno per lavorare con la sezione ritagliata invece di scriverla su test2.txt. Sono sicuro che si può fare è solo capire come farlo.

È stato utile?

Soluzione

Quello che stai guardando non è " binario " ;, è uuencoded . La libreria standard di Python include il modulo uu , per gestire i dati codificati.

Il modulo uu richiede l'uso di file temporanei per la codifica e decodifica. Puoi farlo senza ricorrere a file temporanei usando il modulo

Altri suggerimenti

È necessario open (nome file, 'rb') per aprire il file in modalità binaria. Tieni presente che ciò causerà python per darti terminazioni di riga confuse a due byte su alcuni sistemi operativi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top