2016-08-26 5 views
-3

Я хотел бы получить набор данных в файле в виде списка.Добавить круглые скобки в элементы списка - Python

Ниже данные я чтение из файла, который я хочу, чтобы добавить к списку: вход

файла: (3,5), (5,2), (2,1), (4,2), (4,1), (3,1)

следующий код показывает, что у меня сейчас:

with open("partial.txt") as f: 
List = f.read().splitlines() 

graph1 = ','.join('({0})'.format(w) for w in List) 

print (graph1) 

выход я получаю:

>> (3,5),(5,2),(2,1),(4,2),(4,1),(3,1) 

НО я хочу выше результат в [], как это:

>> [(3,5),(5,2),(2,1),(4,2),(4,1),(3,1)] 

Может кто-то показать, что мне нужно сделать, чтобы получить результат, полученный выше

+0

Вы хотите получить список кортежей? –

+0

just: 'result = [eval (graph1)]' –

+0

да список кортежей. – user3624406

ответ

3
import ast 

s = "(3,5),(5,2),(2,1),(4,2),(4,1),(3,1)" 

>>> list(ast.literal_eval(s)) 
[(3, 5), (5, 2), (2, 1), (4, 2), (4, 1), (3, 1)] 

Вот SO link к eval vs ast.literal_eval

+0

Я сделал это, и я получил: [((3, 5), (5, 2), (2, 1), (4, 2), (4, 1), (3, 1))]. Почему есть дополнительные()? – user3624406

+0

Лучше использовать ['ast.literal_eval()'] (https://docs.python.org/2/library/ast.html#ast.literal_eval). Результат для этой строки один и тот же, но 'ast.literal_eval()' на самом деле не передаст ключи к процессу любому посетителю, как это делает 'eval()'. –

+0

@ user3624406: звучит так, будто вы сделали '[eval (s)]' вместо этого. –

0

Решите по этому коду, список кортежей! :

with open('partial.txt') as f: 
graph = [tuple(map(int, i.split(','))) for i in f] 

print (graph) 
Смежные вопросы