簡體   English   中英

Python-遍歷CSV行並以XML替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM