只能将列表(不是 "unicode")连接到列表

can only concatenate list (not "unicode") to list

我已将一些 Lorem Ipsum 复制粘贴到 Word.docx 文件中,将其保存为 PDF 并尝试 运行 以下脚本以进行测试以从 PDF 中提取文本。

from pyPdf import PdfFileReader
if (fileExtension == ".PDF"):
     pdfDoc = PdfFileReader(file(FOLDER+j, "rb"))
     fileText = ""
     print("Processing a PDF file")
     for pdfpage in range(0,pdfDoc.getNumPages()):
           fileText = fileText + pdfDoc.getPage(pdfpage).extractText()
           fileText = cleantext(fileText)
           fileText = fileText.splitlines(True)
else:
     print("PLEASE CHOOSE A .PDF FILE")

它会为任何 PDF 文件引发此特定错误。但是!,当我 运行 每行代码时,它似乎确实有效。所以如果我先 运行

      for pdfpage in range(0,pdfDoc.getNumPages()):
           fileText = fileText + pdfDoc.getPage(pdfpage).extractText()

然后是下一行,然后是 fileText 的最后一行,它起作用了。那么发生了什么我看不到的事情?

看完第一页fileText确实是list,因为那是splitlines returns。阅读第二页时,将其全文添加到 fileText(现在是 list)。因此出现错误:您不能将字符串 (pdfDoc.getPage(pdfpage).extractText()) 连接到 list.

如果您只需要一个行列表,我建议您像这样重新编写代码:

from pyPdf import PdfFileReader
fileText = []
if (fileExtension == ".PDF"):
    pdfDoc = PdfFileReader(file(FOLDER+j, "rb"))
    print("Processing a PDF file")
    for pdfpage in range(0,pdfDoc.getNumPages()):
        pageText = pdfDoc.getPage(pdfpage).extractText()
        pageText = cleantext(pageText)
        fileText.append(pageText.splitlines(True))
else:
    print("PLEASE CHOOSE A .PDF FILE")

这会将所有行存储在 fileText 中供以后使用。

顺便说一下,当你 运行 代码逐行工作时,因为这两行是在 for 循环之外执行的:

fileText = cleantext(fileText)
fileText = fileText.splitlines(True)

这等同于按照您描述的方式逐行执行(注意缩进):

from pyPdf import PdfFileReader
if (fileExtension == ".PDF"):
    pdfDoc = PdfFileReader(file(FOLDER+j, "rb"))
    fileText = ""
    print("Processing a PDF file")
    for pdfpage in range(0,pdfDoc.getNumPages()):
        fileText = pdfDoc.getPage(pdfpage).extractText()
    fileText = cleantext(fileText)
    fileText = fileText.splitlines(True)
else:
    print("PLEASE CHOOSE A .PDF FILE")