我有一个xml文件,其树大致如下。 Root有很多A,每个A有很多B,每个B都有很多信息:
<root>
<a>
<b>
<info>
<stuff>
...
</stuff>
</info>
<info>
<stuff>
...
</stuff>
</info>
...
</b>
</a>
...
<a>
<b>
<info>
<stuff>
...
</stuff>
</info>
<info>
</info>
...
</b>
</a>
...
</root>
我正在提取数据以进入数据库。进入DB的每个条目都是由不同深度的不同标签构成的。我有一系列for循环使用BeautifulSoup进入最低深度节点来解析xml。我从代码中省略了ORM和DB插入,因为这不是瓶颈所在。
for fn in glob.glob('/dir/*.xml'):
soup = BeautifulSoup(fn)
all_a = soup.find_all('a')
for a in all_a:
blah = a.something.string
blah2 = a.somethingelse.string
all_b = a.find_all('b')
for b in all_b:
blah3 = b.somethingagain.string
blah4 = b.again.string
all_info = b.find_all('info')
for info in all_info:
blah5 = info.find('name')
blah6 = info.almostdone.string
#this is what gets inserted into db
return (blah, blah2, blah3, blah4, blah5, blah6)
我使用glob循环遍历包含数千个xml文件的目录。这种方法非常缓慢。每个return语句都将成为我的数据库中的新行。
我认为使用列表推导可能会加快速度,但它对于xml对象的深度非常粗糙。
有没有办法让它更快?也许是使用BeautifulSoup更好的方法。