我没有使用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-dictionary 但我无法让它适用于我的问题。你们中的任何人都可以帮助我吗?
谢谢你的时间!
答案 0 :(得分:3)
您可以使用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'}