2010-01-19 4 views
4

J'essaie d'extraire des valeurs à partir d'une chaîne, j'ai essayé de faire fonctionner re.match mais je n'ai pas eu de chance. La chaîne est:Extraire des valeurs d'une chaîne

'/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 

J'ai essayé:

map(int,re.search("Value\s*=\s*").group(1)) 

et aussi:

'/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'.split(' = ') 

Je ne sais pas quoi d'autre à ajouter ou faire. Je veux récupérer les attributs 'Value, Max, Step' et leurs valeurs. Est-ce qu'il y a un moyen de faire ça?

Merci pour toute aide

Répondre

6

Pour cette particulière chaîne, ce qui suit parse dans un dictionnaire:

s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
d = {} 
for pair in [val.split('=') for val in s.split('\r\n')[1:-1]]: 
    d[pair[0]] = int(pair[1]) 
3
>>> s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
>>> bits = s.split('\r\n') 
>>> val, max_val, step = [int(bits[i].partition(' = ')[2]) for i in [1, 3, 4]] 
>>> val 
1800 
>>> max_val 
3600 
>>> step 
1 
0
s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
data = {} 

for l in s.split('\r\n'): 
    if " = " in l: 
      k,v = l.split(" = ") 
      data[k] = int(v) 

print data 
0

Vous essayez d'utiliser regexp, mais je pense vous pouvez simplement le diviser par \r\n, puis utiliser les valeurs avec =.

Quelque chose comme:

s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
dct = {} 
arr = [ss for ss in s.split('\r\n') if '=' in ss] 
for e in arr: 
    k, v = e.split(' = ') 
    dct[k] = v 
print dct 
Questions connexes