2013-04-08 2 views
0

저는 Python 2.7.3을 사용하고 있습니다. 나는 사전 키를 통해 검색하는 간단한 코드를 작성하고,이 var_par에 의해 정의 된 키를 발견하면, 그것은 반복적으로 목록 array에서 새로운 값을 대체 : 내가하고 싶은 기본적으로 지금의사전 값을 별도의 파일로 바꿉니다.

var_par = 'B' 
array = [1.4, 2.6, 4.8, 3.56] 

params = { 
    "A": ["A part of",  "#comment 1"], 
    "B": [1.2,    "#comment 2"], 
    "C": ["the test run.", "#comment 3"] 
} 

for I in array: 
    if var_par in params: params[var_par][0] = I 
    execfile('script.py') 

무엇 내를 질문은 다음에 대한 것입니다 : 내 params 사전을 별도의 파일 parameters.dat에 넣고 똑같은 일을하고 싶지만 물리적으로는var_par에 정의 된 값 (이 경우 B)을 변경하고 저장하십시오. 스크립트 script.py 이전의 파일이 실행됩니다. 그 이유는이 스크립트가 파일에서 입력 매개 변수를 읽는 것입니다.

내가 추가하고 그러나

value_old = str(params[var_par][0]) 
value_new = str(I) 

for key in fileinput.input("parameters.dat", inplace = 1): 
    print key.replace(value_old, value_new), 

놀아 시도, 나는이 추가로 가지고있는 문제는 예를 들어 모두 CB주 같은 값, 모두 새로운 값으로 변경 될 때마다. (물론 이것은 코드가 값을 검색하고 주어진 키가 아닌 var_par을 찾지 만한다는 논리입니다.) 그렇지 않으면 작동하지만이 코드가 없으면 코드는 당연히 불가능합니다. 해결할. 다른 한편으로 나는 그것이 어렵지 않아야하며 내가 가까이 있다고 느낍니다.

모든 입력에 대해 감사드립니다.

ps. 저는 파이썬 초보자입니다. 그래서 그다지 잘하지는 못하지만 필요할 경우 도움을 제공하려고 노력할 것입니다.

감사합니다.

+0

params : params [var_par] [0] = I' 대신에'var_par '을 사용하지 않는 이유는 무엇입니까? 그것은'params'의 모든 키를 반복하는 것보다 훨씬 빠릅니다. –

+0

안녕 Martijn, 귀하의 의견을 보내 주셔서 감사합니다. 나는 또한 이것을 깨닫고 더 효율적으로 쓸 수 있다고 생각했지만 아직 다루지 않았다. 내 대답을 편집. –

+0

'B'와 'C'에 대한 목록이 둘 중 하나를 변경하면 변경되며, * 동일한 목록 *을 참조합니다. 당신은 우리에게 어떻게'params '를 실제로 만드는지 보여줄 필요가 있습니다. –

답변

0

제 질문을 고려해 주신 분들께 감사드립니다. 그러나, 나는 그 문제를 이미 스스로 해결할 수 있었다. 다음 코드가 다른 사람들의 프로그래밍에도 기여하기를 바랍니다. parameters.dat 전적으로 (일부 초기) 사전을 포함

execfile('parameters.dat') 

var_par = 'B' 
array = [1.4, 2.6, 4.8, 5.6] 

for I in array: # Start choosing the values in array 

    if var_par in params: params[var_par][0] = I 

    f = open('params_temp.dat', 'w') 
    print >> f, 'params = {' 
    for p in params: 
     if type(params[p][0]) == str: 
      print >> f, ''.join(map(str,['"', p,'"',':'])), '\t', 
      print >> f, ''.join(map(str,['[', '"', params[p][0], '"', ','])), '\t', ''.join(map(str,['"', params[p][1], '"', ']', ','])) 
     else: 
      print >> f, ''.join(map(str,['"', p,'"',':'])), '\t', 
      print >> f, ''.join(map(str,['[', params[p][0], ','])), '\t', ''.join(map(str,['"', params[p][1], '"', ']', ','])) 
    print >> f, '}' 
    f.close() 
    os.remove('parameters.dat') 
    os.rename('params_temp.dat', 'parameters.dat') 

    execfile('script.py') 

:

params = { 
    "A": ["A part of",  "#comment 1"], 
    "B": [1.2,    "#comment 2"], 
    "C": ["the test run.", "#comment 3"] 
} 

다음 반복적으로 파일을 읽을 script.py가 호출 된 후 파일 parameters.dat을 생성합니다 스크립트하는 '종료 후 array의 다음 값이 선택되고 array이 고갈 될 때까지 새 매개 변수 파일이 생성됩니다.

새 사전을 올바르게 작성하기 위해 문자열과 나머지를 올바르게 정렬합니다. 또한 여분의 공백이 인쇄되지 않도록 print 문을 써야했습니다. 즉, 사전 키로 인식되지 않는 " B " 대신 "B"입니다.

이것이 "기본 사항"이라고 생각 될 수도 있지만 실제로 뭔가를 배우기 시작하면 아무것도 기본이 아닙니다.;) 또한 누구나 덜 모호한 방법으로 프로그래밍하거나 다른 방법으로, 나는 기쁘게 들릴 것이다.

건배, Willem.

관련 문제