Python代码在生成输出之前退出/汤对象的大小有限制吗?

Python代码在生成输出之前退出/汤对象的大小有限制吗?,python,xml,python-3.x,beautifulsoup,Python,Xml,Python 3.x,Beautifulsoup,我有一些代码使用BeautifulSoup解析非常大的xml文件(>100mb,有些高达500mb)。我不是一个专业的程序员,我只是使用编程工具进行研究,所以我为任何愚蠢的问题道歉 编辑下面的代码创建了相同的错误,但要简洁得多 import os import io from bs4 import BeautifulSoup import csv import requests import re directory_in_str = 'some directory' directory =

我有一些代码使用BeautifulSoup解析非常大的xml文件(>100mb,有些高达500mb)。我不是一个专业的程序员,我只是使用编程工具进行研究,所以我为任何愚蠢的问题道歉

编辑下面的代码创建了相同的错误,但要简洁得多

import os
import io
from bs4 import BeautifulSoup
import csv
import requests
import re

directory_in_str = 'some directory'

directory = os.fsencode(directory_in_str)


for file in os.listdir(directory):
    filename = os.fsdecode(file)
    full_name = directory_in_str + filename
    handler = open(full_name).read()
    soup = BeautifulSoup(handler, 'html.parser')


with io.open('somecsv.csv', 'w', encoding='utf-8') as f:
        #Write header
        f.writelines(soup)
它应该为整个文件创建一个soup对象,然后遍历它以识别某些元素

我不确定这是否是对soup对象大小的限制,但每当我运行代码时,都会使“==RESTART:Shell==”行处于空闲状态,没有任何输出。像这样:

 RESTART: directory\nameofprogram.py 

=============================== RESTART: Shell ===============================
>>> 
如果我从命令行运行它,它将在生成输出之前退出

我想知道对象本身是否太大,无法存储为soup对象,因此它只是终止程序(不会产生错误,只是重新启动)。代码在较小的文件上运行良好,我能够对高达180+MB的txt文件(格式为xml,但存储为txt)执行类似的操作(将整个文件存储在soup中,然后对其进行迭代),而当前的代码似乎无法处理大小接近该大小的文件

汤对象的大小是否有限制?不同的文件类型是否不同?将所有xml文件转换为txt文件能解决什么问题吗


我听说过ElementTree和iterparse,但我不确定如何将上述内容转换为使用这些工具的代码。我该怎么做呢

请提供一些代码,以不到350行的篇幅再现该问题。@JaredGoguen我刚刚添加了一行,因为在这个问题上没有太多的东西可以不经历同样的事情。John beautifulsoup被认为是解析HTML的一种缓慢的方法,尤其是使用XML(HTML.parser更快,但请尝试其他方法)。自从我没有使用180mb+以来,我从未遇到过类似的情况。还有一件事需要注意的是,你有很多尝试,除了块。既然你用过它们,我猜你知道它们是怎么工作的。这就是为什么您只在某些例外情况下使用Exception(我不责怪,因为我也这么做了),但在调试时,需要删除它们并只捕获您期望的部分。在您发布的简化示例中,我认为您应该缩进正在写入文件的部分。否则,您将放弃目录中除最后一个文件以外的所有内容。请提供一些代码,以不到350行的篇幅再现该问题。@Jaredoguen我刚刚添加了一行,因为在这个问题上没有太多的内容可以不经历同样的事情。John beautifulsoup被认为是解析HTML的一种缓慢的方式,尤其是对于XML(html.parser速度更快,但请尝试其他方法)。由于我没有使用180mb+,因此我从未遇到过类似的情况。还有一点需要注意的是,除了块之外,您还有很多尝试。因为您使用过它们,我猜您知道它们是如何工作的。这就是为什么您只在某些例外情况下使用它们(我没有责怪,因为我也这么做了)但是为了进行调试,需要删除它们并只捕获期望的部分。在您发布的简化示例中,我认为您应该缩进正在写入文件的部分。否则,您将放弃目录中除最后一个文件之外的所有内容。