gpt4 book ai didi

Python 列表理解太慢

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:38 26 4
gpt4 key购买 nike

我有 231 个 pdf 文件,想将它们中的每一个都转换为字符串格式。随后,我会将这些字符串中的每一个保存到一个 txt 文件中。

我能够为此创建一个代码(当我为较少数量的元素运行代码时,我检查它是否有效),但 python 即使在 10 小时后也没有完成程序的执行!

我使用“for 循环”尝试了相同的代码,但它也太慢了。知道如何让这段代码更快吗?

这是我的代码:

from pdfminer.pdfinterp import PDFResourceManager, 
PDFPageInterpreter#process_pdf
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams

from io import StringIO

def pdf_to_text(pdfname):

# PDFMiner boilerplate
rsrcmgr = PDFResourceManager()
sio = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, sio, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)

# Extract text
fp = open(pdfname, 'rb')
for page in PDFPage.get_pages(fp):
interpreter.process_page(page)
fp.close()

# Get text from StringIO
text = sio.getvalue()

# Cleanup
device.close()
sio.close()

return text

lista2 = [pdf_to_text(k) for k in lista1]

lista1 是我的 231 个 pdf 的列表

pdf 文件是从这个 website 中提取的.我只选择了名称中带有“Livro”一词的文件。

最佳答案

这是生成器的重要用例之一:节省内存。

通常,您需要做的就是遍历文件,一次转换一个文件并将输出流式传输到其他地方。比如说:

for f in files:
text = pdf_to_text(f)
output.write(text)

-- 那么您不需要(或不需要)列表理解,事实上您根本不需要创建列表。相反,考虑一次只迭代一个元素。或者创建一个生成器,如果这更有意义的话。

请记住,如果您仍有对内存的引用,垃圾收集器将无法释放内存。如果您创建一个列表理解,那么其中的所有元素(以及这些元素引用的项目)都必须​​同时保存在内存中。通常只有在您计划频繁访问元素或以非线性顺序访问元素时才需要这样做。

您还应该考虑这样一种可能性,即使您可以执行 allocate/transform/deallocate 处理大文件可能仍然“太慢” "如果我​​们谈论的是值得读/写的许多千兆字节。在这种情况下,最好的替代方案通常是考虑使用 C 扩展,以便更好地控制内存的分配和使用方式。此外,pypy 在绝大多数情况下都能正常工作,而且通常比 CPython 快得多。

关于Python 列表理解太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50776263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com