Python 将CSV文件转换为XML文件的有效方法?

Python 将CSV文件转换为XML文件的有效方法?,python,xml,performance,csv,Python,Xml,Performance,Csv,我已经编写了以下代码来将CSV文件转换为XML文件。输入文件有1000万条记录。问题是它运行了数小时,有1000万条记录。由于记录数量较少,如2000条,需要5-10秒 有没有一种方法可以在更短的时间内高效完成 import csv import sys import os from xml.dom.minidom import Document filename = sys.argv[1] filename = os.path.splitext(filename)[0]+'.xml' pat

我已经编写了以下代码来将CSV文件转换为XML文件。输入文件有1000万条记录。问题是它运行了数小时,有1000万条记录。由于记录数量较少,如2000条,需要5-10秒

有没有一种方法可以在更短的时间内高效完成

import csv
import sys
import os
from xml.dom.minidom import Document

filename = sys.argv[1]
filename = os.path.splitext(filename)[0]+'.xml'
pathname = "/tmp/"
output_file = pathname + filename

f = sys.stdin
reader = csv.reader(f)
fields = next(reader)
fields = [x.lower() for x in fields]
fieldsR = fields

doc = Document()
dataRoot = doc.createElement("rowset")
dataRoot.setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance")
dataRoot.setAttribute('xsi:schemaLocation', "./schema.xsd")
doc.appendChild(dataRoot)

for line in reader:
    dataElt = doc.createElement("row")           
    for i in range(len(fieldsR)):
        dataElt.setAttribute(fieldsR[i], line[i])
        dataRoot.appendChild(dataElt)


xmlFile = open(output_file,'w')
xmlFile.write(doc.toprettyxml(indent = '\t'))
xmlFile.close()
sys.stdout.write(output_file)

我不知道Python或Minidom,但您似乎正在执行这一行

dataRoot.appendChild(dataElt)
每行中的每个字段一次,而不是每行一次

你的表现数字表明这里有很大的问题,我不知道是不是这样。对于2000条记录,我希望以毫秒为单位测量时间


不得不说,我经常感到惊讶的是,人们如何为这类事情编写复杂的过程代码,而这可以用六行XSLT或XQuery来完成。

l问题在于,使用这个库,在编写之前必须在内存中创建整个树。有一些问题需要你们去探索。我认为这个问题可以重新讨论,但由于缺乏重点,它已经被关闭了。你能给它添加一些计时测量,看看是什么代码增加了低效率?我想知道你的XML编写器是否试图把所有的东西都放在RAM中,因此随着数据集大小的增加,效率会越来越低。具体来说,你认为1000万个记录需要多少时间才是一个可以接受的解决方案?一小时内有1000万张唱片?4小时?10分钟?试图避免答案将您当前的8小时时间框架缩短几分钟……注意:虽然您没有指定任何比“小时”更准确的时间长度,但这似乎是将时间要求从“2000需要5-10秒”线性扩展到“1000需要5-10秒”的基本要求。如果2k记录需要5到10秒,那么10M记录需要25000到50000秒,即6.94到13.89小时。谢谢Michael。请您具体说明一下python可以与XSLT或XQuery一起使用的地方,或者指向任何地方。传统的、广泛使用的方法是libxslt-see。提供XSLT 3.0而不是1.0的新手是Saxon/C的Python绑定—请参阅和