2013-08-26 2 views
0

J'ai deux listes de textes dont j'aimerais extraire certaines informations.rechercher et extraire une chaîne à partir d'une longue liste avec un motif répété

La première ligne (premiers termes) ressemble

line = "{"af":"16.63","al":"11.58",..." 

Je voudrais extraire uniquement les lettres entre « » dans une liste, si possible. par exemple. ["af","al"...].

La deuxième ligne est très longue et contient une séquence qui ressemble à

line = "...,"name":"Papua New Guinea"},..." 

Je veux juste la chaîne après "name":"<country>" être dans une autre liste si possible. par exemple. [...,"Papua New Guinea",...]. Le même modèle apparaît encore et encore "name":"<country>"}, je voudrais juste les pays.

Ces deux peuvent être redirigés vers deux listes dans des fichiers différents en utilisant SED. Je dois juste me débarrasser de tous les "fluff" environnants.

J'ai essayé une combinaison de regex mais cela ne fonctionne pas. Je ne peux pas obtenir la syntaxe correcte. Merci d'avance.

+0

Votre 'chaîne est invalide coût média; vous ne pouvez pas incorporer '" 'dans une chaîne délimitée par' "'; pas non cité, au moins. –

+0

Je suspecte fortement que vous ayez des données JSON; utilisez le module 'json' pour le transformer en structures Python. –

+0

Oui, ce sont des données JSON. Je vais y regarder Martijn. Merci. – Griff

Répondre

1

Vous consultez les données JSON; utilisez le json module pour analyser ceci dans les structures Python. Le reste de vos tâches sont alors faciles:

first_structure = json.loads(line) 
print first_structure.keys() 

second_structure = json.loads(countries_text) 
print [d['name'] for d in second_structure] 
+0

Alors, que faire si c'est dans un fichier. par exemple. la seule ligne du fichier est: jQuery.fn.vectorMap ('addMap', 'world_en', {"width": 950, "height": 550, "pathes": {"id": {"chemin" :. .. reste de données – Griff

+0

@Griff: alors vous avez * JavaScript * .JSON est un sous-ensemble de JavaScript, donc si vous pouvez extraire les parties entre le premier '{' et le dernier '}' dans cette ligne (en utilisant 'str. partition() 'et' str.rpartition() 'ou' str.split() 'et' str.rsplit() 'avec une limite de 1 split), alors vous pouvez ** généralement ** analyser le résultat en JSON –

+0

Je ne peux pas partitionner comme il est imbriqué par son apparence http://pastebin.com/Rct5yVie – Griff

Questions connexes