【问题标题】:python : problem in saving for loop as a variablepython:将for循环保存为变量的问题
【发布时间】:2020-08-06 04:11:44
【问题描述】:
full_text = ''

i=0
while i<pdf_reader.getNumPages():
    pageinfo = pdf_reader.getPage(i)
    text += str(pageinfo.extractText())
    print(pageinfo.extractText())
    i = i + 1

我正在尝试从 PDF 文件中提取所有文本,我可以通过 for 循环提取所有文本。但是,我想将 for 循环保存为用于操作的变量。在我将 for 循环保存为 all_results 之后,之后我根本无法执行任何操作。例如,我尝试检查文本的长度,输出为 0。

【问题讨论】:

  • 这是直接复制吗?我看到很多用于封装循环和 if 语句的空格。
  • 你能编辑帖子并修复代码的缩进吗?
  • 您不能将 for 循环保存为变量。如果你想重用for循环,你可以将它包装在一个函数中,稍后调用该函数
  • 你确定问题不是因为代码的缩进?
  • @ParamSiddharth:这可能只是将代码复制到 Stack Overflow 的问题。希望 Kenny 将edit 问题显示正确的缩进,以便我们知道循环在哪里结束。但是“保存循环”的含义也不是很清楚。如果all_results 是字符串而i 是整数,则all_results += i 不可能工作。我不确定这是什么意思,真的。也许只是制作一个新的range 对象?或者,如果您想保存文本,请将pageObj.extractText() 的输出附加到列表中?

标签: python pdf


【解决方案1】:

如果我对问题的理解正确,您希望将所有文本合并到一个变量中,以便在循环完成后使用。

试试这个代码:

all_pg_text = ''
all_results = 0
for i in range(0, num_of_pages):
    print("Page Number: " + str(i))
    print("- - - - - - - - - - - - - - - - - - - -")
    pageObj = pdf_reader.getPage(i)
    pg_text = pageObj.extractText()
    print(pg_text)  # one page
    all_pg_text += pg_text  # add to full text
    print("- - - - - - - - - - - - - - - - - - - -")
    all_results +=i
pdfFile.close()

print(all_pg_text)\

根据您更新的问题,这可能有效:

full_text = ''

i=0  
while i < pdf_reader.getNumPages():
    pageinfo = pdf_reader.getPage(i)
    full_text += str(pageinfo.extractText())
    print(pageinfo.extractText())
    i = i + 1  

print(full_text)

【讨论】:

  • 是的,非常感谢,这就是我要找的!对不起我不清楚的问题
【解决方案2】:

您可以使用PDF Miner 包从PDF 文件中提取文本。特此附上示例代码(已测试)。

from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage


def convert(fname, pages=None):
    if not pages:
        # To include all pages
        pagenums = set()
    else:
        # We can specify pages by giving an iterable of pagenumbers
        pagenums = set(pages)

    output = StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)

    # Input PDF
    infile = open(fname, 'rb')
    for page in PDFPage.get_pages(infile, pagenums):
        interpreter.process_page(page)

    # Close all
    infile.close()
    converter.close()
    txt = output.getvalue()
    output.close()
    return txt


# Usage
text = convert('/home/stark/Desktop/file.pdf')  # Includes all Pages
text = convert('/home/stark/Desktop/file.pdf', pages=[1, 2, 3])  # specify pages here
print(text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2012-06-08
    • 2011-01-26
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多