출력 파일에서 라인으로 읽을 수있는 높은 수준의 방법이 있습니까? 내용의 구조에 의해 인식 된 유형이 있습니까?

StackOverflow https://stackoverflow.com/questions/900396

  •  23-08-2019
  •  | 
  •  

문제

내가 읽고 싶은 출력 파일이 있고 각 줄이 여러 유형을 결합하여 목록 버팀대를 선불로 채우고 추가하여 생성되었다고 가정 해 봅시다.

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

나는 줄을 읽고 싶다. 이제 나는 그것들을 읽고 문자열에서 작동하여 값과 유형을 할당하기 위해 문자열에서 작동하지만 Python이 더 높은 수준의 방법을 가지고 있는지 궁금했다.

이 작업을 수행하는 기능을 구축 한 후에는 더 높은 수준의 접근 방식을 찾으려고 노력했지만 찾지 못했습니다.

도움이 되었습니까?

해결책

당신이 찾고있는 것은입니다 평가. 그러나이 기능은 라인을 평가하고 실행할 것임을 명심하십시오. 따라서 신뢰할 수없는 입력에서 실행하지 마십시오!

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

출력 파일을 생성하는 스크립트를 제어 할 수있는 경우 사용하는 것이 좋습니다. JSON 부호화. JSON 형식은 목록 및 사전의 Python 문자열 표현과 매우 유사합니다. 그리고 읽기가 훨씬 더 안전하고 강력 할 것입니다.

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

다른 팁

당신이 설명하는 문제는 일반적으로라고합니다 직렬화. JavaScript 객체 표기법 (JSON) 인기있는 직렬화 프로토콜 중 하나입니다.

아마도 모듈과 같은 모듈로 데이터를 저장하는 것이 더 나을 것입니다. 간물 우선, 정상 문자열을 사용하는 대신. 이렇게하면 많은 문제가 발생하지 않습니다. eval 더 강력한 솔루션을 얻으십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top