我有大约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文件的数据。你知道吗
在过去的几天里,我一直在尝试各种各样的解决方案,结果很快就要失败了。非常感谢你的帮助!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐