如何使python程序可扩展

时间:2012-10-09 22:43:57

标签: python

所以我的程序中连续有一堆代码如下:

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

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

谢谢!

4 个答案:

答案 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 }}

from @WoLpH's answer