2017-04-26 1 views
2

J'ai un fichier où chaque ligne est une représentation de la liste d'un arbre. Par exemple, une de ces lignes dans le fichier est:Comment lire les lignes d'un fichier à être des listes au lieu de chaînes en python

[1, [[2,[]], [3, [ [5,[]], [6, [ [10,[]] ] ] ]], [4, [ [7,[]], [8,[]], [9,[]] ]] ]] 

Si je copier et coller dans mon programme, il comprend qu'il est une liste et je peux facilement manipuler pour trouver la racine et les enfants, et puis prenez ces enfants et trouvez leurs enfants, etc. Quand je lis un fichier ligne par ligne, il prend ces lignes et les transforme en chaînes. Si j'essaie de convertir ces chaînes en listes, il faut que chaque caractère de la chaîne soit un élément différent dans la liste et ce n'est pas ce que je veux. Je veux juste savoir comment je peux lire un fichier ligne par ligne, mais au lieu de cracher des chaînes, il me donne chaque ligne dans sa forme liste littérale. Le fichier que je suis en train de lire est un fichier .txt et il doit rester comme ça je ne peux pas l'enregistrer comme un fichier .py ou quelque chose comme ça.

+0

Avez-vous entendu parler des '' pickle' ou modules csv'? – zondo

+1

Vous recherchez ['ast.literal_eval'] (https://docs.python.org/3/library/ast.html#ast.literal_eval). – zwol

Répondre

2

Essayez le module ast:

>>> s = "[1, [[2,[]], [3, [ [5,[]], [6, [ [10,[]] ] ] ]], [4, [ [7,[]], [8,[]], [9,[]] ]] ]]" 
>>> l = ast.literal_eval(s) 
>>> l[0] 
1 
+0

cela fonctionne, merci! – Blake