所以我的程序中有一行这样的代码:
str = str.replace('ten', '10s')
str = str.replace('twy', '20s')
str = str.replave('fy', '40s')
...
我想让它不必手动打开我的源文件来添加新案例。例如('sy','70')。我知道我必须以某种方式将所有这些放在一个函数中,但我想从命令行映射不在我的“映射器库”中的案例。可能是配置文件?如何?
谢谢!
所以我的程序中有一行这样的代码:
str = str.replace('ten', '10s')
str = str.replace('twy', '20s')
str = str.replave('fy', '40s')
...
我想让它不必手动打开我的源文件来添加新案例。例如('sy','70')。我知道我必须以某种方式将所有这些放在一个函数中,但我想从命令行映射不在我的“映射器库”中的案例。可能是配置文件?如何?
谢谢!
您可以使用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 易于使用和编辑。
您可以使用 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 格式,并允许分隔符 ( ,
) 出现在字符串本身中,这与@WoLpH 的答案中的纯文本格式不同。
(活生生的例子)
一个简单的解决方案可能是将它们放在一个文件中,在您的程序中读取它们并在循环中进行替换..
有很多方法可以做到这一点,如果这是一个很少改变的事情,你可以考虑用 Python dict 来做:
mappings = {
'ten': '10s',
'twy': '20s',
'fy': '40s',
}
def replace(str_):
for s, r in mappings.iteritems():
str_.replace(s, r)
return str_
或者在文本文件中(确保使用任何键中未使用的安全分隔符!)
映射.txt
ten|10s
twy|20s
fy|40s
而 Python 部分:
mappings = {}
for line in open('mappings.txt'):
k, v = line.split('|', 1)
mappings[k] = v
并使用上面的替换:)