2010-05-06 7 views
2

j'ai une chaîne qui ressemble à quelque chose comme ceci:groupements de chaînes Parsing (Python)

[["Name1","ID1","DDY1", "CALL1", "WHEN1"], ["Name2","ID2","DDY2", "CALL2", "WHEN2"],...]; 

Cette chaîne a été prise à partir d'un site Web. Il peut y avoir n'importe quelle quantité de groupements. Comment pourrais-je analyser cette chaîne et imprimer seulement les variables Nom de chaque groupe?

Répondre

6

J'espère avoir bien compris.

>>> import json 
>>> a = json.loads('[["Name1","ID1","DDY1", "CALL1", "WHEN1"], ["Name2","ID2","DDY2", "CALL2", "WHEN2"]]') 
>>> [x[0] for x in a] 
[u'Name1', u'Name2'] 
>>> 
+1

+1 pour simplement utiliser l'analyseur JSON – wump

+0

"Aucun objet JSON n'a pu être décodé" – j00niner

+1

Ensuite, vous devez afficher la chaîne complète. Ce pourrait être un json mutilé ou quelque chose d'autre entièrement. –

2
import ast 
y = ast.literal_eval(input) 
[x[0] for x in y] 

Merci à @stephan pour moi pointant dans la bonne direction avec ast.literal_eval. Comme cela est décrit par le documentaion:

évaluer en toute sécurité un noeud d'expression ou une chaîne contenant une expression Python . La chaîne ou le noeud fourni ne peut contenir que les structures littérales Python suivantes: chaînes, nombres, tuples, listes, dicts, booléens et None.

Cela peut être utilisé pour évaluer en toute sécurité chaînes contenant des expressions Python à partir de sources non fiables, sans la nécessité d'analyser les valeurs soi-même.

Remarque: il s'agit d'une nouvelle fonctionnalité dans Python 2.6.

+2

Suggérer 'ast.literal_eval()' au lieu de 'eval'. – stephan

+0

Correction, merci. Je savais que c'était autour et je le cherchais. http://docs.python.org/library/ast.html ftw. – Gabriel

+1

Vous êtes les bienvenus. Une autre petite amélioration: 'str' est une classe intégrée, donc je n'utiliserais pas ce nom dans la compréhension de la liste. – stephan