使用python将多个xml转换为多行csv

2024-09-29 17:18:00 发布

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

我有大约30000个XML,我想转换成一个大csv的单独行。问题是xml都包含不同数量的标记名和不同的子树。下面是三个示例(提供链接似乎比重现长xml代码更容易):

https://s3.amazonaws.com/irs-form-990/201500509349300700_public.xml

https://s3.amazonaws.com/irs-form-990/201503169349202170_public.xml

https://s3.amazonaws.com/irs-form-990/201532889349300828_public.xml

以下是迄今为止我对代码的了解:

import os
import json
import requests
import xmltodict
import xml.etree.ElementTree as ET
import pandas as pd
import collections
import csv


files = list(os.listdir())
for f in files:
        tree = ET.parse(f)
        root = tree.getroot()
        loopdict = collections.defaultdict(list)

在这一点上,我能想到的最好办法就是为每个标记和用法创建一个单独的列表根.iter()进行检查,直到找到它并将其值附加到列表中。像这样:

for x in root.iter(tag='{http://www.irs.gov/efile}EIN'):
        if len(x.text) <1:
            EIN.append('NA')
            break
        else:
            EIN.append(x.text.replace("{http://www.irs.gov/efile}",""))
            break 

但是,这不能解释某些xml中某个字段的出现次数比其他xml多,或者某些xml中的字段在其他xml中不存在。理想情况下,我只想将每个xml展平,并将每个字段转换为一个单独的列,为没有该列值的行提供NAs。然后,我只需将这一行附加到一个数据框中,该数据框最终将包含我保存的所有30kXML文件的数据。你知道吗

在过去的几天里,我一直在尝试各种各样的解决方案,结果很快就要失败了。非常感谢你的帮助!你知道吗


Tags: csv数据代码https标记importformcom

热门问题