Python中文本生成的最佳实践

时间:2015-02-07 17:43:58

标签: python dynamically-generated auto-generate generated-code

我正在编写一个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...)

2 个答案:

答案 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;。

正确完成,这应该更容易编写和调试,并产生更多的惯用输出。

相关问题