Python在循环中从Csv创建XML

2024-05-16 04:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从csv创建一个xml文件

CSV格式:

CatOne, CatTwo, CatThree
ProdOne, ProdTwo, ProdThree
ProductOne, ProductTwo, ProductThree

所需的XML:

<root>
  <prod>
    <CatOne>ProdOne</CatOne>
    <CatTwo>ProdTwo</CatTwo>
    <CatThree>ProdThree</CatThree>
  </prod>
  <prod>
    <CatOne>ProductOne</CatOne>
    <CatTwo>ProductTwo</CatTwo>
    <CatThree>ProductThree</CatThree>
  </prod>
</root>

这是我的代码:

#! usr/bin/python
# -*- coding: utf-8 -*-
import csv, sys, os
from lxml import etree

def main():
    csvFile = 'test.csv'
    xmlFile = open('myData.xml', 'w')
    csvData = csv.reader(open(csvFile), delimiter='\t')
    header = csvData.next()
    details = csvData.next()
    details2 = csvData.next()
    root = etree.Element('root')

    prod = etree.SubElement(root,'prod')
    for index in range(0, len(header)):
        child = etree.SubElement(prod, header[index])
        child.text = details[index]
        prod.append(child)   
    prod = etree.SubElement(root,'prod')
    for index in range(0, len(header)):
        child = etree.SubElement(prod, header[index])
        child.text = details2[index]
        prod.append(child)      
    result = etree.tostring(root, pretty_print=True)
    xmlFile.write(result)  

if __name__ == '__main__':
    main()

我得到了想要的输出,但是我做的方式,真的很糟糕。 我想用一些普通的方法,我相信它可能更像是Python 但我不知道怎么做。 如果csv有10行甚至20行,代码也应该可以工作。

谢谢你的帮助


Tags: csvchildindexmainprodrootxmlnext
1条回答
网友
1楼 · 发布于 2024-05-16 04:53:13

好吧,我找到了解决办法。

我会在这里回答我自己的问题,我希望能帮助别人

#! usr/bin/python
# -*- coding: utf-8 -*-
import csv, sys, os
from lxml import etree

def main():
    csvFile = 'test.csv'
    xmlFile = open('myData.xml', 'w')
    csvData = csv.reader(open(csvFile), delimiter='\t')

    header = csvData.next()
    counter = 0
    root = etree.Element('root')

    for row in csvData:
        prod = etree.SubElement(root,'prod')
        for index in range(0, len(header)):
            child = etree.SubElement(prod, header[index])
            child.text = row[index].decode('utf-8')
            prod.append(child

    result = etree.tostring(root, pretty_print=True)
    xmlFile.write(result)

if __name__ == '__main__':
    main()

相关问题 更多 >