2009-05-22 4 views
0

,출력 파일에서 행을 읽어 들이고 내용의 구조에 의해 유형을 인식 할 수있는 높은 수준의 방법이 있습니까? 내가 읽고 각 라인은, 함께 여러 종류 합류 앞에 추가하고 목록의 괄호를 추가하여 생성하려는 출력 파일이 있다고 가정

[('tupleValueA','tupleValueB'), 'someString', ('anotherTupleA','anotherTupleB')] 

난에서 라인을 읽고 싶어. 지금은 읽을 수 있습니다 그 (것)들, 안으로 작동하고 가치와 유형을 할당하기 위하여 끈에 작용한다 그러나 나는 파이썬이 이것을위한 더 높은 수준 방법이 있는지 생각해 보았다.

이 기능을 구현 한 후 높은 수준의 접근 방식을 찾으려고 시도했지만 찾지 못했습니다.

답변

2

찾고 계신 것은 eval입니다. 그러나이 함수는 행을 평가하고 실행한다는 점에 유의하십시오. 이제까지 신뢰할 수없는 입력으로 실행하지 마십시오! 출력 파일을 생성하는 스크립트를 제어 할 수있는 경우

>>> print eval("[('tupleValueA', 1), 'someString']") 
[('tupleValueA', 1), 'someString'] 

, 나는 당신이 json 인코딩을 사용하는 것이 좋습니다 것입니다. JSON 형식은 목록 및 사전의 파이썬 문자열 표현과 매우 유사합니다. 그리고 훨씬 더 안전하고 강력하게 읽을 것입니다.

>>> import json 
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) 
'["foo", {"bar": ["baz", null, 1.0, 2]}]' 
>>> json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]') 
["foo", {"bar": ["baz", null, 1.0, 2]}] 
+0

고맙습니다. 왜 내가 이것을 찾을 수 없었습니다. – PyNEwbie

0

아마 일반적인 문자열을 사용하는 대신 pickle과 같은 모듈을 사용하여 데이터를 저장하는 것이 좋습니다. 이 방법을 사용하면 eval과 관련된 많은 문제를 피하고보다 강력한 솔루션을 얻을 수 있습니다.

+0

잘 산 세척은 작동하지 않습니다. 어제부터 내 질문을 참조하십시오. 목록은 8 백만 라인 길이이며 절인시 379,000 개의 키가 있습니다. 파일을 세 부분으로 나누고 필요에 따라 읽을 때도 너무 많은 부하가 걸립니다. 키가 고유 식별자이고 테이블 열이 날짜 (약 3600) 일 때 데이터베이스에 가고 싶지 않습니다. 하지만 고마워. – PyNEwbie