2013-07-26 7 views
1

저는 간단한 텍스트 파일에서 변수를 읽음으로써 Python에서 변수를 정의하려고합니다. 따라서 ConfigParser, ConfigObj, PyYaml 및 JSON에 대한 내용을 읽었습니다. 현재 ConfigObj와 PyYaml에 관심이 많습니다. 그러나 나는 깨끗한 방식으로하고 싶은 일을 아직하지 못했습니다.ConfigObj 또는 PyYaml을 사용하여 사전 쌍을 대화 형 작업 영역으로 추출합니다.

ConfigObj와 PyYaml을 사용하면 외부 텍스트 파일에 정의 된 모든 것을 사전에로드 할 수 있습니다. 모든 키 - 값 쌍을 추출하여 대화 형 작업 영역에 별도의 변수로 저장하여이 사전을 진행하고 싶습니다. eval를 사용

import yaml 

config_file = open('myFile', 'r') 
config = yaml.read(config_file) 

keys = config.keys() 
values = config.values() 

for i in range(len(keys)): 
    string = keys[i] + '=' + str(values[i]) 
    eval(string) 

때때로 때문에 가능한 일이 악성 모든 종류의 것들을 허용에 대해 찌푸리게 :

이것은 내가 지금까지 사용 된 PyYaml의 방법입니다. 따라서 PyYaml 및/또는 ConfigObj에 위의 기능을 구현하는 내장 함수가 있는지 여부를 알고 싶습니다.

답변

2

다음 내용은 귀하의 질문을 올바르게 이해한다고 가정하고 귀하가 원하는 것을 수행해야합니다.

참고 : 키를 덮어 쓰기 전에 키 존재 여부를 확인한 다음 키가 다른 경우 약간 다른 이름으로 지정합니다.

이 방법이 효과가 있지만 실제로는 값이있는 사전을 사용하는 것이 좋습니다. 로컬 변수가 존재하지 않으면 사전을 참조하는 것만으로 어떤 문제가 있습니까?

+0

실제로 저는 MATLAB을 사용하고 있지만 유연성을 높이기 위해 파이썬도 사용하고 있습니다. 궁극적 인 목표는 구성 파일에 정의 된 매개 변수를 MATLAB 바이너리 형식 (또는 매트 파일)에 저장하는 것입니다. 그리고 제가 작성한 MATLAB 프로그램은 일반적인 지역 변수를 사용하기 때문에 사전에서 벗어나야했습니다. – Aeronaelius

+0

필자는 파이썬에서 locals()를 사용해야한다는 것을 왜 이해하지 못한다.하지만 '최상의 방법'과 위험 요소와 기타 등등이 아니라는 것을 이해하는 한. – Logan

+0

mat 파일에 변수를 저장하려면 어떻게해야합니까? 물론 나는 전체 MATLAB 프로그램을 다르게 작동하도록 다시 작성할 수 있습니다. 그러나 구성을 구문 분석하는 데 필요한 스크립트는 프로그램에 부합해야하며 다른 방향으로는 적합하지 않아야한다고 생각합니다. – Aeronaelius

1

경우

다음
import __main__ 

할 수 있습니다

__main__.__dict__[keys[i]] = values[i] 

또는 때 놀랄 가치를 얼마에 많이 의존하는 현명한인지 여부도

__main__.__dict__.update(config) 

당신의 전역 함수는 yaml 항목으로 덮어 씁니다.