我没有Python脚本编写方面的经验,但是作为我项目的要求,我必须构建代码,这是我遇到的问题-
我有一本字典,其字典中的值低于以下值,该字典来自UNIX脚本,用于设置要在python中读取的通用路径-
{'# blah blah blah ': '', 'START_DIR': '/PATH/TO/StartDir', 'FIRST_DIR': '${START_DIR}/FirstDir', '# GIBBERISH': 'MORE GIBBERISH', 'SECOND_DIR': '${FIRST_DIR}/SecondDir'....so on and so forth}
我能够读取这些值,但这些值会像-
FIRST_DIR="${START_DIR}/FirstDir"
SECOND_DIR="${FIRST_DIR}/SecondDir"
.....
由于unix变量在Python中读取时不会扩展,因此我想将字典中所有$ {}包含变量的值替换为dict值中的所有$ {},如下所示-
{'# blah blah blah ': '', 'START_DIR': '/PATH/TO/StartDir', 'FIRST_DIR': '/PATH/TO/StartDir/FirstDir', '# GIBBERISH': 'MORE GIBBERISH', 'SECOND_DIR': '/PATH/TO/StartDir/FirstDir/SecondDir'....so on and so forth}
我搜索了这个论坛,并在此链接找到了最接近的答案-https: //codereview.stackexchange.com/questions/80273/replace-keys-in-values-with-key-values-from-same-字典,但无法解决我的问题。你们中的任何人都可以帮我吗?
谢谢你的时间!
您可以re.search
用来查找unix样式变量。如果找到匹配项,则用字典中的那个替换该变量。出现while
循环是因为这些变量可以引用具有更多变量的变量,等等。因此,请继续进行直到所有变量都已扩展。
import re
def convert_dict(d):
while any(re.search('\${(.*)}', i) for i in d.values()):
for key, value in d.items():
match = re.search('\${(.*)}', value)
if match:
d[key] = value.replace(match.group(0), d[match.group(1)])
输出
>>> d = {'FIRST_DIR': '${START_DIR}/FirstDir',
'# GIBBERISH': 'MORE GIBBERISH',
'# blah blah blah ': '',
'SECOND_DIR': '${FIRST_DIR}/SecondDir',
'START_DIR': '/PATH/TO/StartDir'}
>>> convert_dict(d)
{'FIRST_DIR': '/PATH/TO/StartDir/FirstDir',
'START_DIR': '/PATH/TO/StartDir',
'# blah blah blah ': '',
'# GIBBERISH': 'MORE GIBBERISH',
'SECOND_DIR': '/PATH/TO/StartDir/FirstDir/SecondDir'}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句