2016-12-14 4 views
2

Ich habe eine Eingabe Datei mit folgendem Format:Convert String-Tupels in ein Tupel

[(1,1),(2,1)], 'add', 11 
[(1,2),(1,3)], 'div', 2 
[(3,1),(4,1),(3,2),(4,2)], 'times', 240 
[(2,2),(2,3)], 'minus', 3 
      . 
      . 

Jede Zeile ein Tupel ich erstellen möchten. Wie ist es möglich, jede Zeichenkette in ein Tupel zu konvertieren?

Für Beispiel:

line: string "[(1,1),(2,1)], 'add', 11" ---------> tuple: [ [(1,1),(2,1)], 'add', 11] 

Bisher habe ich versucht:

tuples = [] 
for line in file: 
    tuples.append((line,)) 

Aber ich bin immer einen String convertion

[("[(1,1),(2,1)], 'add', 11\n",), ("[(1,2),(1,3)], 'div', 2\n",), ("[(3,1),(4,1),(3,2),(4,2)], 'times', 240\n",), ("[(2,2),(2,3)], 'minus', 3",)] 

Antwort

3

Sie verwenden können ast.literal_eval als:

>>> import ast 
>>> my_string = "[(1,1),(2,1)], 'add', 11" 

>>> ast.literal_eval(my_string) 
([(1, 1), (2, 1)], 'add', 11) 

Gemäß der ast.literal_eval(node_or_string) document:

sicher einen Ausdruck Knoten bewerten oder eine Unicode oder Latin-1 codierte Zeichenfolge ein Literal oder Python Behälter Anzeige enthält. Die angegebene Zeichenfolge oder der Knoten darf nur aus den folgenden Python-Literalstrukturen bestehen: Strings, Zahlen, Tupel, Listen, Dicts, Booleans und None.

+1

Beat mich dazu :) – brianpck