2011-01-28 3 views
7

Okumak istediğim bir metin dosyası var. Metindeki her bir tuple/satır ('description string', [integer 1 listesi], [integer 2] listesi) biçimindedir. Metin dosyası şu gibi bir şeye benzeyebilir:Metin dosyasından tuple olarak listelerin okunup tupl olarak okunması, string değil - Python

('madde 1', [1,2,3,4], [4,3,2,1])
('öğe 2', [], [4,3,2,1])
("öğe 3, [1,2], [])

metin dosyasından her satırı okumak mümkün istiyorum

, daha sonra doğrudan yerleştirmek

Her bir satırın bir dize olarak okunduğunu biliyorum, ancak bu dizeyi nasıl çıkarmalıyım. Bir string.split (',') kullanmayı denedim, ancak listelere bastığımda sorun çıkıyor. Bunu başarmanın bir yolu var mı yoksa metin dosyalarımı nasıl değiştirmem gerekecek?

Ayrıca 5,6 (I

[(1,2), (3,4), şeklinde de benzer olduğunu okumak istiyorum dizilerini bir listesini bir metin dosyası), Herhangi bir miktar tuple içerebilen

. Listede okumak ve listedeki her bir tuple için bir döngü yapmak istiyorum. Bence bu ikisi kabaca aynı süreci kullanacak.

cevap

12

eval'u kullanmaya ne dersiniz?

EDIT @ Ignacio adlı kullanıcının yanıtını kullanarak ast.literal_eval numaralı telefonu kullanabilirsiniz.

>>> c = eval("('item 1', [1,2,3,4] , [4,3,2,1])") 
>>> c 
('item 1', [1, 2, 3, 4], [4, 3, 2, 1]) 

Yalnızca dosyanın içeriğinden% 100 emin iseniz bunu yapmanızı öneririz.

>>> def myFunc(myString, myList1, myList2): 
...  print myString, myList1, myList2 
... 
>>> myFunc(*eval("('item 1', [1,2,3,4] , [4,3,2,1])")) 
item 1 [1, 2, 3, 4] [4, 3, 2, 1] 

@ Ignacio'nun yanıtına bakın ... çok, çok daha güvenli.

ast kullanımı doğuracak uygulama: Sen ast.literal_eval() aradığınız

>>> import ast 
>>> def myFunc(myString, myList1, myList2): 
...  print myString, myList1, myList2 
... 
>>> myFunc(*ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])")) 
item 1 [1, 2, 3, 4] [4, 3, 2, 1] 
21

.

>>> ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])") 
('item 1', [1, 2, 3, 4], [4, 3, 2, 1]) 
+0

Will 1, tekrar oy kullanabilirsiniz zaman :) – sberry

+0

Muhtemelen Python 2.3'ü çalıştırdığımı söylemeliydim, bu daha sonraki bir versiyon için mi? Ast modülü bulamıyorum. –

+0

@ Das.Rot: Ne yazık ki öyle. –

1

Sen metin dosyaları için dışarı çıktığını ve daha sonra onları geri okuma da piton tasarrufu için pickle modülüne bakmak isteyebilirsiniz.

bir saat içinde