摘要: 我想获取一个“模块”类型的变量并将其导出。
我正在使用import从 .py 文件中导入 python 模块并对其进行更改。我需要将模块导出回文件或获取完整模块的字符串表示,然后可以将其写入磁盘。
我一直无法找到任何方法来导出 python 模块或将模块中的对象转换为结构化、纯文本 python 可执行格式的字符串。(不是json,酸洗等)
详细问题和用例: 此要求是内部构建过程的一部分;没有安全要求,只有我们自己的模块,而不是内置模块,正在被修改。python 脚本与业务逻辑一起运行以修改许多其他脚本。此过程使用仅在构建时可用的信息。因此,我无法选择在运行时导入具有不同数据的模块。
最初的系统使用了一个带有占位符字符串的模板,该模板将被替换,但当前的要求需要对对象声明进行更复杂的修改,其中以编程方式修改对象比字符串替换要容易得多。
我所做 的 使用用 python 编写的主生成器脚本,我可以导入多个模块(只有变量声明,没有可执行代码)并进行所有我需要的替换。我留下了一个模块类型的变量,我需要将其导出回文件以便稍后执行。
@abarnert 有一些好主意。我不知道 repr 功能。这让我得到了信息,但没有任何格式。这使我看到了 pprint ,它与我到目前为止所获得的最接近。
示例 example.py
sample = {
'level1_dict_1' : {
'key1' : 'value1',
'key2' : {
'level2_dict' : {
'key1' : 'value3',
'key2' : ['list1','list2','list3','list4'],
}
}
},
'level1_dict_2' : {
'key1' : 'value1',
'key2' : 'value2',
},
}
大大简化(并且没有应用任何业务逻辑)我基本上想做以下事情:
with open("example.py","w") as outfile:
example = __import__('example') # Import module
example.sample['level1_dict_1']['key2']['level2_dict']['key2'][2] = "newlistitem3" # Change 1 property in a list nested a few levels deep
outfile.write("sample = \n" + pprint.pformat(example.sample)) #
我希望有与我的源文件相同的格式,但是 pprint 虽然可读,但格式与我希望的不同。不过,这可能与我所需要的一样接近。
pprint 输出:
sample =
{'level1_dict_1': {'key1': 'value1',
'key2': {'level2_dict': {'key1': 'value3',
'key2': ['list1',
'list2',
'newlistitem3',
'list4']}}},
'level1_dict_2': {'key1': 'value1', 'key2': 'value2'}}
编辑和澄清: - 我的目标是加载一个模块,修改它,并将其保存为可执行的 python 文件。这就是我反对pickle、json等的原因。我需要生成一个可执行的 py 文件。- 重写用例以进行澄清 - 添加示例和有关我尝试过的事情的更多信息