循环遍历xml文件列表?

时间:2018-03-28 20:14:08

标签: python xml function for-loop elementtree

我正在尝试创建一个循环遍历xml文件列表的程序,并从文件中提取某些元素:

from os import listdir, path
import xml.etree.ElementTree as ET

mypath = 'C:\myfolder'

files = [f for f in listdir(mypath) if f.endswith('.xml')]

for file in files:
    tree = ET.parse(file)
    root = tree.getroot()

ns = {namespaces}

def myfunction():
    if 'something' in root.tag:
        filename = path.splitext(file)[0]
        var1 = root.find('./element1', ns)
        var2 = root.find('./element2', ns)

        row = [
            var1.text,
            var2.text
            ]

    return row   

如果我调用该函数,上面的代码返回一个包含var1,var2(来自最后一个文件)的列表。我定义此函数的原因是有不同类型的xml文件具有不同的元素名称,因此我将为每种文件类型创建一个函数。

现在我想创建一个表,其中每个文件的输出是一行,即:。

filename1, var1, var2
filename2, var1, var2
ect.

理想情况下将表导出到csv文件。我该怎么做?

1 个答案:

答案 0 :(得分:2)

编写CSV文件的最简单方法是使用Standard CSV。 要编写CSV文件,就像打开文件并使用默认编写器一样简单:

import csv
from os import listdir, path
import xml.etree.ElementTree as ET

mypath = 'C:\myfolder'

files = [f for f in listdir(mypath) if f.endswith('.xml')]

for file in files:
    tree = ET.parse(file)
    root = tree.getroot()

ns = {namespaces}

def myfunction():
    if 'something' in root.tag:
        filename = path.splitext(file)[0]
        var1 = root.find('./element1', ns)
        var2 = root.find('./element2', ns)

        row = [
            var1.text,
            var2.text
            ]

        # Open the file and store the data
        with open('outfile.csv', 'a', newline='') as csvfile:
            csv_writer = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
            csv_writer.writerow(row)

    return row   

请注意,csf.writer会收到一个列表作为参数。