2011-01-28 18 views
7

मेरे पास एक टेक्स्ट फ़ाइल है जिसमें मैं पढ़ना चाहता हूं जिसमें टुपल्स की पंक्तियां हैं। पाठ में प्रत्येक tuple/पंक्ति ('वर्णन स्ट्रिंग', [पूर्णांक 1 की सूची], [पूर्णांक 2 की सूची] के रूप में है)। जहां टेक्स्ट फ़ाइल कुछ ऐसा दिखाई दे सकती है:टेक्स्ट फ़ाइल से सूचियों के tuple में tuple के रूप में पढ़ें, स्ट्रिंग नहीं - पायथन

('आइटम 1', [1,2,3,4], [4,3,2,1])
('आइटम 2', [], [4,3,2,1])
('आइटम 3, [1,2], [])

मैं टेक्स्ट फ़ाइल से प्रत्येक पंक्ति को पढ़ने में सक्षम होना चाहता हूं, फिर उन्हें सीधे रखें एक समारोह जहां,

function(string, list1, list2) 

मुझे पता है कि प्रत्येक पंक्ति एक स्ट्रिंग के रूप में पढ़ा है, लेकिन मैं इस स्ट्रिंग कुछ कैसे निकालने के लिए की जरूरत में। मैं string.split (',') का उपयोग करने का प्रयास कर रहा हूं, लेकिन जब मैं सूचियों को दबाता हूं तो समस्याएं आती हैं। क्या इसे पूरा करने का कोई तरीका है या क्या मुझे अपनी टेक्स्ट फाइलों को कुछ संशोधित करना होगा?

मैं भी है कि मैं

[(1,2), (3,4), के रूप में इसी तरह है कि पढ़ने के लिए चाहते हैं tuples की एक सूची का एक पाठ फ़ाइल है (5,6), ...]

जिसमें किसी भी मात्रा में टुपल्स हो सकते हैं। मैं इसे एक सूची में पढ़ना चाहता हूं और सूची में प्रत्येक टुपल के लिए लूप के लिए एक करना चाहता हूं। मुझे लगता है कि ये दोनों मोटे तौर पर एक ही प्रक्रिया का उपयोग करेंगे।

उत्तर

12

eval का उपयोग करने के बारे में क्या?

EDITast.literal_eval का उपयोग करके @ Ignacio का उत्तर देखें।

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

यदि आप फ़ाइल की सामग्री के 100% सुनिश्चित हैं तो मैं केवल यह करने की अनुशंसा करता हूं।

>>> 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] 

@ इग्नासिओ का जवाब देखें ... बहुत अधिक सुरक्षित।

को लागू करने में बिताए के उपयोग के प्राप्त होते हैं:

>>> 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() के लिए देख रहे हैं।

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

विल +1 एक घंटे में, जब मैं फिर से मतदान कर सकते हैं :) – sberry

+0

मुझे शायद यह उल्लेख करना चाहिए था कि मैं पाइथन 2.3 चला रहा हूं, क्या यह बाद के संस्करण के लिए है? मुझे अस्थ मॉड्यूल नहीं मिल रहा है। –

+0

@ दास.रॉट: दुर्भाग्य से यह है। –

1

तुम भी अजगर को बचाने के लिए pickle मॉड्यूल को देखने के लिए चाहते हो सकता है बाहर वस्तुओं पाठ फ़ाइलों के लिए और फिर उन्हें पढ़ने में वापस।

संबंधित मुद्दे