2014-04-16 23 views
0

我目前有一个Python脚本,用于解析文件(本例中为XML文件),并根据需要逐行替换,具体取决于多个值阵列。就目前而言,剧本效果很好,但觉得可能会好很多。之后我还需要添加更多的阵列,并担心性能。Python - 如何使用数组中的值逐行替换

此外,我目前设置的方式不允许计算和打印已完成的全部替换。 (例如“取代:xyz - 制作XX替换品”)虽然不是直接要求,但我希望在将来添加此功能。

我非常感谢任何建议!

下面的代码:

arrayOne = ["old string one", "new string one"] 
arrayTwo = ["old string two", "new string two"] 

# Variable 'path' collected from command line input 
f = open(path, "r", encoding="utf8") 
newFile = open(path.replace(".xml", "-new.xml"), "w", encoding="utf8") 

def replace(a,b): 
    for data in f: 
     for datatype in (arrayOne, arrayTwo): 
      data = data.replace(datatype[a], datatype[b]) 
     newFile.write(data) 
    newFile.close() 

replace(0,1) 

f.close() 
+0

我觉得这是更适合http://codereview.stackexchange.com/ – EdChum

+0

谢谢 - 我已经交叉贴吧按你的建议,代码审查。 – zugzug

回答

0

我认为它看起来相当有效的,虽然有点混乱。我会说,用一堆数组尝试一下,看看性能是否是一个问题。如果你有大量的数组并且必须像现在这样列出所有的数组,那么它可能会变得混乱。就我个人而言,我想我会把它们放在一本大字典中,以“旧字符串”作为关键字。这是我在下面做的。

至于你最后的印刷线,我认为这将很容易通过一个计数器,如下所示。

此外,现在我不认为你需要replace是一个单独的功能,除非你打算让它做更复杂的事情。

myDictionary = {'old string one' : 'new string one', 
       'old string two' : 'new string two'} 

# Variable 'path' collected from command line input 
f = open(path, "r", encoding="utf8") 
newFile = open(path.replace(".xml", "-new.xml"), "w", encoding="utf8") 
counter = 0 

for data in f: 
    for key in myDictionary: 
     if key in data: 
      data = data.replace(key, myDictionary[key]) 
      counter += 1 
    newFile.write(data) 
newFile.close() 

f.close() 

print 'Replaced', path, 'Made', counter, 'replacements.'