我正在编写一个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 :(得分:1)
你真的没有看到这种事情的例子,因为你的解决方案可能有点过度设计;)
我猜你正在尝试收集某些事情和#34;然后你想要运行一个脚本来处理事情和#34状态" ;。而不是编写元脚本,通常更方便的是编写将执行处理的脚本(例如,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))
然后你可以稍后用以下内容解析它:
with open('todays_progress.txt') as f_in:
lines = f_in.read().splitlines()
things, states = [x, y for x, y in lines.split('<^_^>')]
states_of_things = dict(zip(things, states))
比平面字典更复杂的数据结构?嗯,这是Python。可能有不止一个模块!如果你需要更详细的结构,我会建议json如果明文可以做,或pickle。有两个关于pickle的警告:自定义对象并不总是很好地重新实现,并且它很容易受到代码注入攻击,所以只有在整个工作流程都受信任的情况下才能使用它。
希望这有帮助!
答案 1 :(得分:0)
您似乎正在按关键字逐字翻译。
阅读每个&#34;句子&#34;几乎肯定会更好。进入代表性的Python类;然后,您可以直接运行模拟,或让每个类将自己写入&#34;输出句子&#34;。
正确完成,这应该更容易编写和调试,并产生更多的惯用输出。