将CSV文档转换为XML

2024-04-26 02:43:49 发布

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

我知道这个问题是多余的,但我尝试了我找到的所有Python代码,并修改了我的文件,但它们都没有起作用。我需要找到一种方法将我的文件dataset/tournagesdefilmsparis2011" rel="nofollow">myData.csv转换为一个可以被导航器读取的XML格式文件。在

我这个月才开始学Python,所以我是个初学者。这是我的代码:

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


csvFile = 'myData.csv' # création de la variable pour le fichier csv
reader= csv.reader(open(csvFile), delimiter=';', quoting=csv.QUOTE_NONE) # création d'une variable reader à qui on renvoie le tableau csv

print "<data>"
for record in reader:
    if reader.line_num == 1:
        header = record
    else:
        innerXml = ""
        dontShow = False
        type = ""
        for i, field in enumerate(record):
            innerXml += "<%s>" % header[i].lower() + field + "</%s>" % header[i].lower()
            if i == 1 and field == "0":
                type = "Next"
            elif type == "" and i == 3 and field == "0":
                type = "Next"
            elif type == "" and i == 3 and field != "0":
                type = "film"

            if i == 1 and field == "X":
                dontShow = True

        if dontShow == False:
            xml = "<%s>" % type
            xml += innerXml
            xml += "</%s>" % type
            print xml
print "</data>"

Tags: and文件csv代码fieldiftypexml
2条回答

(作为答案发布,以便我可以显示代码块)

在编写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结构。在

考虑用专用的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)

输出

^{pr2}$

相关问题 更多 >