2010-04-23 7 views
2

je suis en train de faire quelque chose assez simple:`strip`ing les résultats d'une scission en python

line = "name  : bob" 
k, v = line.lower().split(':') 
k = k.strip() 
v = v.strip() 

est-il possible de combiner en une seule ligne en quelque sorte? Je me suis retrouvé à écrire encore et encore lors de la création de parseurs, et parfois cela implique bien plus que deux variables.

Je sais que je peux utiliser regexp, mais cela est assez simple pour ne pas avoir vraiment besoin d'elle ...

+0

désolé, je ne voulais pas dire « recombinent k et v de retour en une ligne '. Je voulais dire, puis-je éviter d'avoir à faire X.strip() pour chaque X dans line.split(). Je voudrais pouvoir, après 'split'ing, obtenir toutes les variables que je divise déjà dépouillé. –

Répondre

7
k, v = [x.strip() for x in line.lower().split(':')] 
+0

Si les performances sont importantes, je ferais le plus bas après le strip car vous traiterez moins de caractères de cette façon. k, v = [x.strip(). lower() pour x dans line.split (':')]. Mais là encore, une expression régulière compilée peut-être encore plus rapide. –

+0

@Michael, l'optimisation prématurée est la racine de tous les maux. Nous n'avons aucune raison de penser que ce code apporte une contribution significative aux mauvaises performances ou que la performance est un problème. Je suppose que faire le bas après la bande (et donc chercher et appeler la méthode deux fois) serait en fait * plus lent * pour l'échantillon d'OP, mais je ne sais pas ou je ne sais pas et vous ne savez pas sans le chronométrer. –

-1
":".join([k, v]) 
1
import 're' 
k,v = re.split(r'\s*:\s*', line) 
line = ':'.join((k,v)) 
1
>>> map(str.strip,line.lower().split(":")) 
['name', 'bob']