Python ricerca stringa

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
achilledue
Prode Principiante
Messaggi: 165
Iscrizione: lunedì 28 maggio 2007, 21:52

Python ricerca stringa

Messaggio da achilledue »

Salve devo trovare nel testo seguente:

'\x13*\x08\xcb!\x1bXR\xc0\x05\x00\x00\x00\x00\x00I\xc0xl\xbea\x10\xc0T\xc0\x13\x01\x00\x00\x00\x00\x00I@%\x08\xcb!\x1b\x18Q@\x88"\xed{\x9e\xcfD@\x11\r\x04body\x0c\x04\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0b\x11\x0e\x16named_string_attribute\x0e\x0fnamed_attribute\x0e\x02st\r\x06attrib\x0c\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\x05\x00\x00\x00\x0c\xff\xff\xff\xff\x0c\x00\x00\x00\x00\x04\xa5\xee\xdf\x00\x07\x04name\x07\x1dFreeCurveCube_SenzaManico.sab\x11\r\x04lump\x0c\x06\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\x07\x00\x00\x00\x0c\x00\x00\x00\x00\n'

la stringa FreeCurveCube_SenzaManico.sab ma non so come filtrare il testo essendo caratteri esadecimali se ho ben capito.
La stringa comincia con il carattere x1d

Grazie
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Python ricerca stringa

Messaggio da Zoff »

Codice: Seleziona tutto

text = '\x13*\x08\xcb!\x1bXR\xc0\x05\x00\x00\x00\x00\x00I\xc0xl\xbea\x10\xc0T\xc0\x13\x01\x00\x00\x00\x00\x00I@%\x08\xcb!\x1b\x18Q@\x88"\xed{\x9e\xcfD@\x11\r\x04body\x0c\x04\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0b\x11\x0e\x16named_string_attribute\x0e\x0fnamed_attribute\x0e\x02st\r\x06attrib\x0c\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\x05\x00\x00\x00\x0c\xff\xff\xff\xff\x0c\x00\x00\x00\x00\x04\xa5\xee\xdf\x00\x07\x04name\x07\x1dFreeCurveCube_SenzaManico.sab\x11\r\x04lump\x0c\x06\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\x07\x00\x00\x00\x0c\x00\x00\x00\x00\n'
stringToFind = 'FreeCurveCube_SenzaManico.sab'
pos = text.index(stringToFind)

print '%s si trova in posizione %d' % ( stringToFind, pos )
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
achilledue
Prode Principiante
Messaggi: 165
Iscrizione: lunedì 28 maggio 2007, 21:52

Re: Python ricerca stringa

Messaggio da achilledue »

Grazie Zoff

la tua risposta è precisa e puntuale ma la mia domanda era posta male :-( .Io cerco la stringa Nome.sab che ho visto, ha come primo carattere aggiunto x1d.
Posso eventualmente cercare la stringa che mi interesse e che so terminare con: .sab e ripulirla dal carattere x1d?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Python ricerca stringa

Messaggio da Zoff »

Non credo di aver capito cosa intendi per "cercare".
Quali sono gli input che vuoi immettere e l'output atteso?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
achilledue
Prode Principiante
Messaggi: 165
Iscrizione: lunedì 28 maggio 2007, 21:52

Re: Python ricerca stringa

Messaggio da achilledue »

Dal testo che vedi devo estrarre un nome variabile nome.sab. In pratica devo fare una scansione del file e assegnare, ad esempio, nella variabile A il nome trovato.
La mia diffcioltà sta nel fatto che tratto dei caratteri esadecimali.

Spero di essere stato chiaro mi rendo conto che magari anziche chiarrirti le idee te le confondo :-)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Python ricerca stringa

Messaggio da Zoff »

Puoi usare il modulo per le regular expressions:

Codice: Seleziona tutto

import re

text = '\x13*\x08\xcb!\x1bXR\xc0\x05\x00\x00\x00\x00\x00I\xc0xl\xbea\x10\xc0T\xc0\x13\x01\x00\x00\x00\x00\x00I@%\x08\xcb!\x1b\x18Q@\x88"\xed{\x9e\xcfD@\x11\r\x04body\x0c\x04\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0b\x11\x0e\x16named_string_attribute\x0e\x0fnamed_attribute\x0e\x02st\r\x06attrib\x0c\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\x05\x00\x00\x00\x0c\xff\xff\xff\xff\x0c\x00\x00\x00\x00\x04\xa5\xee\xdf\x00\x07\x04name\x07\x1dFreeCurveCube_SenzaManico.sab\x11\r\x04lump\x0c\x06\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\x07\x00\x00\x00\x0c\x00\x00\x00\x00\n'

print re.search('[a-zA-Z-_+]+.sab',text).group(0)
Tutto sta nel tarare la regexp perché supporti tutti i possibili caratteri che possono capitare.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: Python ricerca stringa

Messaggio da Claudio_F »

O, in alternativa, si cerca '.sab' con index e si scorre indietro fino a incontrare il byte '\x1d'

Codice: Seleziona tutto

j = i = text.index('.sab')
while text[i] != '\x1d':
    i -= 1
name = text[i+1:j+4]
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Python ricerca stringa

Messaggio da crap0101 »

oppure

Codice: Seleziona tutto

>>> import re
>>> s='\x13*\x08\xcb!\x1bXR\xc0\x05\x00\x00\x00\x00\x00I\xc0xl\xbea\x10\xc0T\xc0\x13\x01\x00\x00\x00\x00\x00I@%\x08\xcb!\x1b\x18Q@\x88"\xed{\x9e\xcfD@\x11\r\x04body\x0c\x04\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0b\x11\x0e\x16named_string_attribute\x0e\x0fnamed_attribute\x0e\x02st\r\x06attrib\x0c\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\x05\x00\x00\x00\x0c\xff\xff\xff\xff\x0c\x00\x00\x00\x00\x04\xa5\xee\xdf\x00\x07\x04name\x07\x1dFreeCurveCube_SenzaManico.sab\x11\r\x04lump\x0c\x06\x00\x00\x00\x04\xff\xff\xff\xff\x04\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\xff\xff\xff\xff\x0c\x07\x00\x00\x00\x0c\x00\x00\x00\x00\n'
>>> m = re.search('(?<=\x1d)(.+\.sab)', s)
>>> m.group(0)
'FreeCurveCube_SenzaManico.sab'
>>> m.start()
185
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Python ricerca stringa

Messaggio da crap0101 »

ripensandoci, la mia soluzione potrebbe non andare bene: davo per scontato che \x1d fosse un separatore univoco, ma potrebbe benissimo non essere così, e in quel caso matcha troppo.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
achilledue
Prode Principiante
Messaggi: 165
Iscrizione: lunedì 28 maggio 2007, 21:52

Re: Python ricerca stringa

Messaggio da achilledue »

Grazie a chi mi ha risposto oggi provo
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: Python ricerca stringa

Messaggio da Claudio_F »

E comunque per quanto riguarda i "caratteri esadecimali" è un problema apparente, cioè non vi è alcun problema. In Python2 tutti i caratteri di una stringa non unicode sono comunque byte, rappresentati nel programma con i simboli ASCII corrispondenti al loro valore dove possibile, o con sequenze di escape \xNN, quando non vi è un corrispondente simbolo, ma, ad esempio, la 'A' si può indifferentemente scrivere: '\x41'
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti