2017-11-02 8 views
4

다소 집중적 인 계산을 완료했으며 pickle (재귀 깊이가 지나치게 많음)에 결과를 저장할 수 없어서 모든 데이터를 인쇄하여 텍스트로 저장해야했습니다. 파일.Python - 파일에서 튜플의 목록

텍스트의 튜플 목록을 잘 변환하는 쉬운 방법이 있습니까? 파이썬 튜플 목록? 출력은 다음과 같습니다

[(10, 5), (11, 6), (12, 5), (14, 5), (103360, 7), (16, 6), (102725, 7), (17, 6), (18, 5), (19, 9), (20, 6), ...(it continues for 60MB)] 
+1

['ast.literal_eval'] (https://docs.python.org/3/library/ast.html#ast.literal_eval) –

+0

가능한 중복 https://stackoverflow.com/questions/1894269/ 변환 문자열 - 표현 - 중 - 목록 - 중 - 파이썬 목록 – FcoRodr

+2

잠깐, 그 데이터는 꽤 평평합니다. 왜 피클이 재귀 깊이를 초과할까요? 이 데이터 예제는 실제로 대표적인 것입니까? –

답변

5

당신은 ast.literal_eval()를 사용할 수 있습니다

>>> s = '[(10, 5), (11, 6), (12, 5), (14, 5)]' 
>>> res = ast.literal_eval(s) 
[(10, 5), (11, 6), (12, 5), (14, 5)] 
>>> res[0] 
(10, 5) 
+0

내 소스에 전체 데이터를 포함해야합니까? – KONAKONA

+0

@ KONAKONA 아니요, 저장된 파일이 무엇이든 –

+0

@KONAKONA로 읽으셨습니까? 저장된 데이터의 하위 집합 만 변환 하시겠습니까? – ettanany

0
string = "[(10, 5), (11, 6), (12, 5), (14, 5), (103360, 7), (16, 6), (102725, 7), (17, 6), (18, 5), (19, 9), (20, 6)]" # Read it from the file however you want 

values = [] 
for t in string[1:-1].replace("),", ");").split("; "): 
    values.append(tuple(map(int, t[1:-1].split(", ")))) 

먼저 내가 시작을 제거하고 [1:-1]에 대괄호를 종료, 나는 분할 할 수 );으로 ), 교체 ;에 의해 이루어 지므로 튜플 안에 쉼표로 구분되지 않습니다. 앞에는 )이 없기 때문입니다. 루프 내부에서 [1:-1]을 사용하여 이번에 괄호를 제거하고 쉼표로 분리합니다. map 부분은 숫자 strint으로 변환하고이를 tuple으로 추가합니다.