首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -遍历CSV行并在XML中替换

Python -遍历CSV行并在XML中替换
EN

Stack Overflow用户
提问于 2016-07-26 20:03:33
回答 3查看 884关注 0票数 0

我有一个XML,它的值是我想要在模板中替换的。根据同一行中的数据为每一行具有文件名的生成XML。这些基本上只是模板的副本,有一个查找和替换。到目前为止,我已经使文件名正常工作,但是XML文件并没有根据行替换其数据,而是只替换来自第3行第10列的数据。我希望让它遍历一系列行并为每个行创建新文件。我对这里出了什么问题感到困惑。

CSV片段:

代码语言:javascript
复制
COLUMN_K, COLUMN_L
K02496.ai, Test
K02550.ai, Test
K02686.ai, Test
K02687.ai, Test

现有XML模板片段

代码语言:javascript
复制
  <gmd:resourceFormat>
    <gmd:MD_Format>
      <gmd:name>
        <gco:CharacterString>COLUMN_K</gco:CharacterString>
      </gmd:name>

Python代码

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2016-07-26 20:07:08

看看这些例子,它们运行得很好。

Python create XML from Csv within a loop

http://code.activestate.com/recipes/577423-convert-csv-to-xml/

票数 0
EN

Stack Overflow用户

发布于 2016-07-26 20:33:00

您在xml标记中提到了“COLUMN_F”,并试图在代码中替换“COLUMN_E”。

xml = xml.replace('COLUMN_E',exampleDatai+3)

票数 0
EN

Stack Overflow用户

发布于 2016-07-27 16:01:22

我能够简单地通过将循环移到代码的最顶端来解决这个问题。问题是它正在替换文本,但是却找不到"COLUMN_*“,因为它已经被一个值替换了。将循环移到顶部解决了这一问题。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38598927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档