2011-01-28 11 views
7

튜플의 행을 포함하는 텍스트 파일을 읽고 싶습니다. 텍스트의 각 튜플/행은 ('설명 문자열', [정수리스트 1], [정수리스트 2]) 형식입니다. 텍스트 파일 같은 것을 보일 수 있습니다 장소 :텍스트 파일의 목록 튜플을 문자열이 아닌 터플로 읽습니다. - 파이썬

('항목 1', [1,2,3,4], [4,3,2,1])
('항목이', [], [4,3,2,1])
('항목 3, [1,2], [])

텍스트 파일에서 각 줄을 읽고 싶습니다. 나는 각 행은 문자열로 읽을 것을 알고,하지만 난 어떤 방법이 문자열을 추출해야,

function(string, list1, list2) 

기능에. string.split (',')을 사용하려고 시도했지만 목록에 충돌 할 때 문제가 발생합니다. 이 작업을 수행 할 수있는 방법이 있습니까, 아니면 텍스트 파일을 수정해야합니까?

은 또한 5,6- (I는

[(1,2), (3,4)의 형태에 유사하다 판독하고자 튜플리스트의 텍스트 파일을), ...]

어떤 튜플을 포함 할 수 있습니다. 내가 목록에서 그것을 읽고 목록에서 각 튜플에 대한 루프를하고 싶습니다. 나는이 두 가지가 대략 동일한 과정을 사용할 것이라고 생각한다.

답변

12

eval을 사용하면 어떨까요?

편집 @ Ignacio의 답변은 ast.literal_eval을 참조하십시오.

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

@ Ignacio의 답변 ... 훨씬 안전합니다.

AST의 사용은 얻을 것이다 적용 : 당신은 ast.literal_eval() 찾고있는

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

의지 +1, 내가 다시 투표를 할 수있을 때 : – sberry

+0

필자는 아마도 Python 2.3을 실행 중이라고 언급 했어야합니다. ast 모듈을 찾을 수 없습니다. –

+0

@ Das.Rot : 불행히도. –

1

당신은 텍스트 파일로 출력 개체를 다음에 다시 읽기 또한 파이썬을 저장하기위한 pickle 모듈을보고 할 수 있습니다.

시간에
관련 문제