2010-06-30 10 views
2

J'ai une énorme chaîne, qui ressemble à ['elem1','elem2',(...)] et contient environ 100 000 (!) Éléments. Quelle est la meilleure méthode pour revenir à une liste?Convertir un tableau en chaîne

+0

Um, est-il converti en chaîne ou convertir en tableau que vous recherchez? – Codler

+0

Etes-vous sûr que c'est une chaîne et que vous ne faites pas quelque chose comme 'repr (yourlist)'? Vous voulez partager du code? –

+0

oui, c'est une chaîne de caractères à partir d'un fichier texte, qui a été écrit par moi - eval fonctionne bien – pythonina

Répondre

3

eval("['elem1','elem2']") vous donne retour liste ['elem1','elem2']

Si vous aviez chaîne ressemblant à ce ["elem1","elem2",(...)] vous pouvez utiliser json.read() (en Python 2.5 ou une version antérieure) ou json.loads() (en python 2.6) de json module pour le charger en toute sécurité.

+0

Est-ce que l'analyseur JSON fait la distinction entre guillemets simples et doubles? – detly

+0

Il semble que oui. Essayer json.read ("['a']") donne json.ReadException: L'entrée n'est pas valide JSON: '[' a ']' –

0

Si vous ne souhaitez pas utiliser eval, cela peut fonctionner:

big_string = """['oeu','oeu','nth','nthoueoeu']""" 

print big_string[1:-2].split("'")[1::2] 
1

Une solution possible est:

input = "['elem1', 'elem2' ] " 
result_as_list = [ e.strip()[1:-1] for e in input.strip()[1:-1].split(",") ] 

Cette builds la liste complète des résultats en mémoire. Vous pouvez passer à l'expression générateur

result_as_iterator = (e.strip()[1:-1] for e in input.strip()[1:-1].split(",")) 

si la consommation de mémoire est une préoccupation.

Questions connexes