1

외부 파일을 기반으로 다른 파이썬 스크립트를 생성하는 python 스크립트를 작성하고 있습니다. 내 코드의 작은 부분을 아래에서 볼 수 있습니다. 필자는 이러한 종류의 스크립트에 대한 많은 예제를 접한 적이 없으므로 최선의 방법이 무엇인지 궁금해하고있었습니다.Python에서 텍스트 생성을위한 유용한 정보

코드 예제의 마지막 두 줄에서 알 수 있듯이 내가 사용하고있는 기술은 때때로 다루기 힘들 수 있습니다.

SIG_DICT_NAME = "sig_dict" 

SIG_LEN_KEYWORD = "len" 
SIG_BUS_IND_KEYWORD = "ind" 
SIG_EP_ADDR_KEYWORD = "ep_addr" 

KEYWORD_DEC = "{} = \"{}\"" 

SIG_LEN_KEYWORD_DEC = KEYWORD_DEC.format(SIG_LEN_KEYWORD, SIG_LEN_KEYWORD) 
SIG_BUS_IND_KEYWORD_DEC = KEYWORD_DEC.format(SIG_BUS_IND_KEYWORD, 
              SIG_BUS_IND_KEYWORD) 
SIG_EP_ADDR_KEYWORD_DEC = KEYWORD_DEC.format(SIG_EP_ADDR_KEYWORD, 
              SIG_EP_ADDR_KEYWORD) 

SIG_DICT_DEC = "{} = dict()" 
SIG_DICT_BODY_LINE = "{}[{}.{}] = {{{}:{}, {}:{}, {}:{}}}" 

#line1 = SIG_DICT_DEC.format(SIG_DICT_NAME) 
#line2 = SIG_DICT_BODY.format(SIG_DICT_NAME, x, y, z...) 
+0

매우 궁금합니다. 어떤 문제를 해결하려고합니까? 즉, 생성하려고하는 코드는 무엇입니까? –

+0

모범 사례는 [함수, 클래스,'hasattr' /'getattr', 메타 클래스] (https://github.com/lihaoyi/macropy#levels-of-magic) *와 같은보다 구조화 된 덜 마법적인 메소드를 사용하는 것입니다. * 당신은 텍스트 생성에 대해 생각합니다. – jfs

+0

@HughBothwell 외부 파일은 특정 색인의 일부 버스에있는 디지털 신호 목록입니다. 이 파일은 최대 색인 또는 최대 버스 주소와 같은 일부 제한 조건을 준수하지만 신호 이름, 버스 및 색인이 변경 될 수 있습니다. 외부 파일을 구문 분석 할 수있는 파이썬을 생성하고 신호 이름을 해당 특성 (버스, 색인, 향후 다른 어떤 것)에 매핑하는 사전을 작성하고 신호를 설정하거나 읽는 각 신호에 대한 함수를 작성하려고합니다 . – jwp36

답변

0

키워드 별로 번역하는 것 같습니다.

각 "문장"을 대표적인 Python 클래스로 읽는 것이 거의 확실합니다. 그런 다음 직접 시뮬레이션을 실행하거나 각 클래스가 자체를 "출력 문장"에 작성하게 할 수 있습니다.

올바르게 작성하면 작성 및 디버그가 훨씬 쉬워 져서 더 많은 관용적 출력을 생성 할 수 있습니다. 나는 당신이 어떤 '사물의 상태 "를 수집하기 위해 노력하고 있음을 추측하고있어)

를, 솔루션이 조금이라도 오버 설계 할 수 있기 때문에

1

당신은 정말 이런 종류의 예를 볼 수 없습니다 그런 다음 "상태"를 처리하기 위해 스크립트를 실행하려고합니다. 메타 스크립트를 작성하는 것보다 처리를 수행 할 스크립트 (예 : process.py)를 작성하고 "상태"(예 : collect.py)를 수집하는 스크립트를 작성하는 것이 훨씬 더 편리합니다. .

그럼 당신은 collect.py에서 결과를 가지고 process.py에 그들을 던져 todays_results.txt을 작성하거나 할 수있는 몇 가지 예 : collect.py ->process.py ->20150207_results.txt

필요한 경우, 당신은 같은과 디스크에 중간 파일을 작성할 수 있습니다 :

:

with open('todays_progress.txt') as f_out: 
    for thing, state in states_of_things.iteritems(): 
     f.write('{}<^_^>{}\n'.format(state, thing)) 

은 그럼 당신은 같은 뭔가 다시 나중에 그것을 구문 분석 할 수

플랫 dict보다 복잡한 데이터 구조입니까? 음, 이것은 파이썬입니다. 아마 하나 이상의 모듈이있을 것입니다! 내 머리 꼭대기에서 평문을 만들려면 json을 제안하고, 좀 더 자세한 구조가 필요하면 pickle을 제안하십시오. pickle에 대한 두 가지 경고 : 사용자 정의 객체가 항상 다시 인스턴스화되는 것은 아니며 코드 삽입 공격에 취약하기 때문에 전체 워크 플로우를 신뢰할 수있는 경우에만 사용하십시오.

희망이 도움이됩니다.