2016-07-26 106 views
0

我有一個CSV,我想在XML模板內部替換值。爲每行生成XML,其中的文件名基於同一行中的數據。這些基本上只是模板的一個查找和替換副本。 到目前爲止,我已經獲得了文件名以正常工作,但是XML文件不會根據行替換其數據,而只會替換第3行第10列中的數據。我期望讓它遍歷一系列的行,並且爲每個文件創建新文件。我很難在這裏發生什麼問題。Python - 遍歷CSV行並替換爲XML

CSV段:

COLUMN_K, COLUMN_L 
K02496.ai, Test 
K02550.ai, Test 
K02686.ai, Test 
K02687.ai, Test 

現有的XML模板片段

<gmd:resourceFormat> 
    <gmd:MD_Format> 
     <gmd:name> 
     <gco:CharacterString>COLUMN_K</gco:CharacterString> 
     </gmd:name> 

Python代碼

import csv 

exampleFile = open('U:\PROJECTS\Technical Graphics\metadata.csv') 
exampleReader = csv.reader(exampleFile) 
exampleData = list(exampleReader) #CSV as list 

with open('U:\PROJECTS\Technical Graphics\COLUMN_K_edited.xml') as inputfile: #template XML 
    xml = inputfile.read() 

with open('U:\PROJECTS\Technical Graphics\metadata.csv') as csvfile: 
    for row in reader(csvfile, delimiter=';'): 
     for i in range(5): #range of 5 rows 
      xml = xml.replace('COLUMN_K', exampleData[i+3][10]) 
#Only taking value from row 3, COLUMN_K- Need values from row 3 on 
      xml = xml.replace('COLUMN_L', exampleData[i+3][11]) 
#Only taking value from row 3, COLUMN_L- Need values from row 3 on  
      with open('U:\PROJECTS\Technical Graphics\XXX' + str((exampleData[i+3][10])) + ".xml", 'w') as outputfile: 
#Correctly outputs multiple filenames based on COLUMN_K value 
       outputfile.write(xml) #writes multiple XMLs 
+0

使用[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)進行更新。因爲它是我無法理解輸入和輸出應該是什麼。例如,閱讀器以分號分隔符打開,但示例中沒有分號。沒有'COLUMN_E'可以替換。 –

+0

對不起。我從現在開始遵循該協議,現在編輯示例。 – MapZombie

回答

0

你在XML標籤中提到 'COLUMN_F',你嘗試在代碼替換 'COLUMN_E'

XML = xml.replace( 'COLUMN_E',exampleData [I + 3] [10])

+0

僅以這些爲例。將爲每個「COLUMN_X」構建代碼。我現在會修復它,讓它讀得更好。 – MapZombie

+0

基本上,CSV中的每個COLUMN_X都對應XML模板中的「COLUMN_X」。這些將被替換爲CSV值並生成新的XML文件。 – MapZombie

0

我能夠簡單地通過將循環移到代碼的最頂端來解決這個問題。 問題在於它正在替換文本,但之後找不到「COLUMN_ *」,因爲它已被替換爲值。將循環移到頂部解決了這個問題。

import csv 

    for i in range(5): #loops through 5 rows 
     exampleFile = open('U:\PROJECTS\Technical Graphics\metadata.csv') #CSV file 
     exampleReader = csv.reader(exampleFile) 
     exampleData = list(exampleReader) #turns CSV into list 

     with open('U:\PROJECTS\Technical Graphics\COLUMN_K_edited.xml') as inputfile: 
      xml = inputfile.read() #XML template file 

     with open('U:\PROJECTS\Technical Graphics\metadata.csv') as csvfile: 

      for row in reader(csvfile, delimiter=';'): #defines CSV delimiter 

        with open('U:\PROJECTS\Technical Graphics\XXX' + str((exampleData[i+3][10])) + ".xml", 'w') as outputfile: 
        #Filename of XMLs based on column 10 data   
         xml = xml.replace('COLUMN_I', str((exampleData[i+3][8]))) 
         xml = xml.replace('COLUMN_K', str((exampleData[i+3][10]))) 


         outputfile.write(xml) #writes 5 XML files