将CSV文档转换为XML

时间:2016-10-08 08:00:14

标签: python xml csv

我知道这个问题是多余的,但我尝试了为我的文件找到和修改的所有Python代码,但它们没有用。我需要找到一种方法将文件myData.csv转换为XML格式文件,该文件可以由导航器读取。

我本月刚开始学习Python,所以我是初学者。这是我的代码:

argstr := []string{"-c", "script.sh < text.txt"}

2 个答案:

答案 0 :(得分:2)

考虑使用专用DOM对象构建XML,而不是使用lxml模块可以对字符串进行串联。使用Element()SubElement()等方法,您可以通过读取CSV数据迭代构建XML树:

import csv
import lxml.etree as ET

headers = ['Titre', 'Realisateur', 'Date_Debut_Evenement', 'Date_Fin_Evenement', 'Cadre',
           'Lieu', 'Adresse', 'Arrondissement', 'Adresse_complète', 'Geo_Coordinates']

# INITIALIZING XML FILE
root = ET.Element('root')

# READING CSV FILE AND BUILD TREE
with open('myData.csv') as f:
    next(f)                             # SKIP HEADER
    csvreader = csv.reader(f)

    for row in csvreader:        
        data = ET.SubElement(root, "data")
        for col in range(len(headers)):
            node = ET.SubElement(data, headers[col]).text = str(row[col])

# SAVE XML TO FILE
tree_out = (ET.tostring(root, pretty_print=True, xml_declaration=True, encoding="UTF-8"))

# OUTPUTTING XML CONTENT TO FILE
with open('Output.xml', 'wb') as f:
    f.write(tree_out)

<强>输出

<?xml version='1.0' encoding='UTF-8'?>
<root>
  <data>
    <Titre>1</Titre>
    <Realisateur>BUS PALLADIUM</Realisateur>
    <Date_Debut_Evenement>CHRISTOPHER THOMPSON</Date_Debut_Evenement>
    <Date_Fin_Evenement>21 mai 2009</Date_Fin_Evenement>
    <Cadre>21 mai 2009</Cadre>
    <Lieu>EXTERIEUR</Lieu>
    <Adresse>PLACE</Adresse>
    <Arrondissement>PIGALLE</Arrondissement>
    <Adresse_complète>75018</Adresse_complète>
    <Geo_Coordinates>PLACE PIGALLE 75018 Paris France</Geo_Coordinates>
  </data>
  <data>
    <Titre>2</Titre>
    <Realisateur>LES INVITES DE MON PERE</Realisateur>
    <Date_Debut_Evenement>ANNE LE NY</Date_Debut_Evenement>
    <Date_Fin_Evenement>20 mai 2009</Date_Fin_Evenement>
    <Cadre>20 mai 2009</Cadre>
    <Lieu>DOMAINE PUBLIC</Lieu>
    <Adresse>SQUARE</Adresse>
    <Arrondissement>DU CLIGNANCOURT</Arrondissement>
    <Adresse_complète>75018</Adresse_complète>
    <Geo_Coordinates>SQUARE DU CLIGNANCOURT 75018 Paris France</Geo_Coordinates>
  </data>
  <data>
    <Titre>3</Titre>
    <Realisateur>DEMAIN, A L'AUBE</Realisateur>
    <Date_Debut_Evenement>GAEL CABOUAT</Date_Debut_Evenement>
    <Date_Fin_Evenement>17 avril 2009</Date_Fin_Evenement>
    <Cadre>17 avril 2009</Cadre>
    <Lieu>EXTERIEUR</Lieu>
    <Adresse>RUE</Adresse>
    <Arrondissement>QUINCAMPOIX</Arrondissement>
    <Adresse_complète>75004</Adresse_complète>
    <Geo_Coordinates>RUE QUINCAMPOIX 75004 Paris France</Geo_Coordinates>
  </data>
  ...

答案 1 :(得分:0)

(张贴为答案,以便我可以显示代码块)

编写XML时有很多挑剔的细节。在Python中,您应该使用某些版本的ElementTree来帮助解决这个问题。一个很好的教程是Creating XML Documents。引自那里:

from xml.etree.ElementTree import Element, SubElement, Comment, tostring

top = Element('top')

comment = Comment('Generated for PyMOTW')
top.append(comment)

child = SubElement(top, 'child')
child.text = 'This child contains text.'

child_with_tail = SubElement(top, 'child_with_tail')
child_with_tail.text = 'This child has regular text.'
child_with_tail.tail = 'And "tail" text.'

child_with_entity_ref = SubElement(top, 'child_with_entity_ref')
child_with_entity_ref.text = 'This & that'

print(tostring(top))

如果您将此作为如何创建XML元素树的示例,您应该能够将代码转换为所需的XML结构。