[英]Python - Iterate through CSV rows and replace in XML
我有一個CSV,其值要在XML模板內替換 。 為每行生成具有基於同一行中數據的文件名的XML 。 這些基本上只是帶有查找和替換的模板副本。 到目前為止,我已經使文件名正常工作,但是XML文件不會根據行替換其數據,而是僅替換來自第3行第10列的數據。我希望遍歷一系列行並創建它每個都有新文件。 我對這里出了什么問題感到困惑。
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
您在xml標記中提到了“ COLUMN_F”,並且試圖替換代碼中的“ COLUMN_E”
xml = xml.replace('COLUMN_E',exampleData [i + 3] [10])
通過將循環移到代碼的最頂部,我能夠解決此問題。 問題在於它正在替換文本,但隨后找不到“ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.