2014-04-16 22 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.'