0

所以我的程序中有一行这样的代码:

str = str.replace('ten', '10s')
str = str.replace('twy', '20s')
str = str.replave('fy', '40s')
...

我想让它不必手动打开我的源文件来添加新案例。例如('sy','70')。我知道我必须以某种方式将所有这些放在一个函数中,但我想从命令行映射不在我的“映射器库”中的案例。可能是配置文件?如何?

谢谢!

4

4 回答 4

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 易于使用和编辑。

于 2012-10-09T22:59:10.567 回答
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 格式,并允许分隔符 ( ,) 出现在字符串本身中,这与@WoLpH 的答案中的纯文本格式不同。

活生生的例子

于 2012-10-09T23:38:46.553 回答
0

一个简单的解决方案可能是将它们放在一个文件中,在您的程序中读取它们并在循环中进行替换..

于 2012-10-09T22:50:48.767 回答
0

有很多方法可以做到这一点,如果这是一个很少改变的事情,你可以考虑用 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

并使用上面的替换:)

于 2012-10-09T22:51:30.663 回答