嵌套的循环很慢,美丽的汤

时间:2014-06-29 17:56:55

标签: python xml beautifulsoup

我有一个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更好的方法。

0 个答案:

没有答案