Python 3.x 未提取xml中的最后一个元素

Python 3.x 未提取xml中的最后一个元素,python-3.x,lxml,Python 3.x,Lxml,下面我有一个Python3脚本,它应该下载一个xml文件并将其拆分为较小的文件,每个文件只有500个条目。我有两个问题: 原始xml中的最后一项不在分割文件中 如果原始xml的长度为1000项,它将创建第三个空xml文件 有谁能告诉我,在我的代码中哪里会有这样的错误导致这些症状 import urllib.request as urllib2 from lxml import etree def _yield_str_from_net(url, car_tag): xml_file

下面我有一个Python3脚本,它应该下载一个xml文件并将其拆分为较小的文件,每个文件只有500个条目。我有两个问题:

  • 原始xml中的最后一项不在分割文件中
  • 如果原始xml的长度为1000项,它将创建第三个空xml文件
  • 有谁能告诉我,在我的代码中哪里会有这样的错误导致这些症状

    import urllib.request as urllib2
    from lxml import etree
    
    def _yield_str_from_net(url, car_tag):
    
        xml_file = urllib2.urlopen(url)
        for _, element in etree.iterparse(xml_file, tag=car_tag):
            yield etree.tostring(element, pretty_print=True).decode('utf-8')
            element.clear()
    
    def split_xml(url, car_tag, save_as):
    
        output_file_num = 1
        net_file_iter = _yield_str_from_net(url, car_tag)
        while True:
            file_name = "%s%s.xml" % (save_as, output_file_num)
            print("Making %s" % file_name)
            with open(file_name, mode='w', encoding='utf-8') as the_file:
                for elem_count in range(500):    # want only 500 items
                    try:
                        elem = next(net_file_iter)
                    except StopIteration:
                        return
                    the_file.write(elem)
                    print("processing element #%s" % elem_count)
            output_file_num += 1
    
    if __name__ == '__main__':
        split_xml("http://www.my_xml_url.com/",
                  'my_tag',
                  'my_file')
    

    第二个不是错误,而是设计的。读取1000个元素后,迭代器还不知道没有其他项,因此继续执行
    while True
    循环

    如果迭代器有一个函数,那么您就可以用
    替换它,而hasNext
    来克服这个问题。不幸的是,python中没有这样的东西

    对于第一个问题:目前我在您的代码中看不到任何解释此问题的内容