只能将列表(不是 "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")
我已将一些 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")