所以我的程序中连续有一堆代码如下:
str = str.replace('ten', '10s')
str = str.replace('twy', '20s')
str = str.replave('fy', '40s')
...
我想这样做,我不必手动打开我的源文件来添加新案例。例如('sy','70')。我知道我必须以某种方式将所有这些放在函数中,但是我想从命令行映射不在我的“mapper lib”中的案例。配置文件可能吗?怎么样?
谢谢!
答案 0 :(得分:4)
您可以使用json格式的配置文件,如下所示:
[
["ten", "10s"],
["twy", "20s"],
["fy", "40s"]
]
将其保存为'replacements.json',然后以这种方式使用它:
import json
with open('replacements.json') as i:
replacements = json.load(i)
text = 'ten, twy, fy'
for r in replacements:
text = text.replace(r[0], r[1])
然后,当您需要更改值时,只需编辑replacements.json文件,而无需触及任何Python代码。
替换文件的格式可以是任何东西,但json易于使用和编辑。
答案 1 :(得分:0)
一个简单的解决方案可能是将它们放在一个文件中,在程序中读取它们并在循环中替换它们。
答案 2 :(得分:0)
许多方法可以做到这一点,如果它是一个很少改变的东西,你可以考虑用Python词典来做:
mappings = {
'ten': '10s',
'twy': '20s',
'fy': '40s',
}
def replace(str_):
for s, r in mappings.iteritems():
str_.replace(s, r)
return str_
或者在文本文件中(确保使用未在任何键中使用的安全分隔符!)
<强> mappings.txt 强>
ten|10s
twy|20s
fy|40s
Python部分:
mappings = {}
for line in open('mappings.txt'):
k, v = line.split('|', 1)
mappings[k] = v
并使用上面的替换:)
答案 3 :(得分:0)
您可以使用csv将替换以人类可编辑的形式存储在文件中:
import csv
with open('replacements.csv', 'rb') as f:
replacements = list(csv.reader(f))
for old, new in replacements:
your_string = your_string.replace(old, new)
其中replacements.csv
:
ten,10s
twy,20s
fy,40s
它避免了json格式中不必要的标记,例如"
,[]
,并允许分隔符(,
)出现在字符串本身,而不像纯文本格式{{3 }}