摘要: 我想要一個類型爲'module'的變量並將其導出。導出一個python模塊(到字符串或py文件)
我正在使用導入從.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文件。 - 重寫使用案例的澄清 - 增加的例子和更多的信息,我已經嘗試過
爲什麼你需要導入文件?你不能使用像django這樣的模板系統來從模板中生成自定義的PY文件嗎? – jarmod
或者創建Python文件讀取並從運行時生成對象的_data_文件,而不是嘗試創建Python文件? – abarnert
我認爲這是你正在尋找的東西:http://stackoverflow.com/questions/14163532/is-there-anything-like-python-export – Jocke