如何使用 PyPDF2 在 Python 3 中将 PDF 中的所有页面作为单个字符串检索
How to retrieve ALL pages from PDF as a single string in Python 3 using PyPDF2
为了从多页 PDF 中获取单个字符串,我正在这样做:
import PyPDF2
pdfFileObject = open('sample.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
count = pdfReader.numPages
for i in range(count):
page = pdfReader.getPage(i)
output = page.extractText()
output
结果是来自 单页 (文档中的最后一页)的字符串 - 正如根据 PyPDF2 documentation 应有的那样。我应用此方法是因为我读到一些人建议它阅读整个 PDF,但在我的情况下不起作用。
很明显,这是一个基本操作,对于我的经验不足,我提前表示歉意。我尝试了其他解决方案,如 Tika、PDFMiner 和 Textract,但到目前为止,PyPDF 似乎是唯一让我满意的解决方案。
如有任何帮助,我们将不胜感激。
更新:
按照建议,我将 output
定义为一个列表,然后将所有页面附加到它(正如我所想的那样)循环中的所有页面,如下所示:
for i in range(count):
page = pdfReader.getPage(i)
output = []
output.append(page.extractText())
认为结果是列表中的单个字符串,如 ['sample content from the last page of PDF']
难道是因为这一行:
output = page.extractText()
试试这个:
output += page.extractText()
因为在您的代码中,您要覆盖 "output" 变量的值而不是附加到它。不要忘记在 for 循环之前声明 "output" 变量。所以 output = ''
在 for i in range(count):
之前
您每次都在覆盖 output
变量。
虽然您可以使用 output +=
将字节连接在一起,但使用列表可能更安全,在这种情况下,您可以在循环外定义 output = []
,并替换 output = page.extractText()
与 output.append(page.extractTest())
.
此代码有效:
import os, glob, PyPDF2, sys
file_path = 'C:/Users/ipeter/Desktop/Webdriverdownloads'
read_files = glob.glob(os.path.join(file_path,'*.pdf'))
for files in read_files:
pdfReader = PyPDF2.PdfFileReader(files)
count = pdfReader.numPages
output = []
for i in range(count):
page = pdfReader.getPage(i)
output.append(page.extractText())
print(output)
第一个循环读取文件夹中的所有文件。第二个循环读取 pdf 中的所有页面。
output[0] = pdfpage1
output[1] = pdfpage2
output[2] = pdfpage3
...
等等
如果您需要一个字符串中的整个 pdf,您可以保存 newoutput
使用连接函数:
seperator = ','
newoutput = seperator.join(output)
或简化:
newoutput = ','.join(output)
首先尝试将输出创建为空字符串..
output = ""
for i in range(pdfReader.numPages):
pageObj = pdfReader.getPage(i)
output += pageObj.extractText()
为了从多页 PDF 中获取单个字符串,我正在这样做:
import PyPDF2
pdfFileObject = open('sample.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
count = pdfReader.numPages
for i in range(count):
page = pdfReader.getPage(i)
output = page.extractText()
output
结果是来自 单页 (文档中的最后一页)的字符串 - 正如根据 PyPDF2 documentation 应有的那样。我应用此方法是因为我读到一些人建议它阅读整个 PDF,但在我的情况下不起作用。
很明显,这是一个基本操作,对于我的经验不足,我提前表示歉意。我尝试了其他解决方案,如 Tika、PDFMiner 和 Textract,但到目前为止,PyPDF 似乎是唯一让我满意的解决方案。
如有任何帮助,我们将不胜感激。
更新:
按照建议,我将 output
定义为一个列表,然后将所有页面附加到它(正如我所想的那样)循环中的所有页面,如下所示:
for i in range(count):
page = pdfReader.getPage(i)
output = []
output.append(page.extractText())
认为结果是列表中的单个字符串,如 ['sample content from the last page of PDF']
难道是因为这一行:
output = page.extractText()
试试这个:
output += page.extractText()
因为在您的代码中,您要覆盖 "output" 变量的值而不是附加到它。不要忘记在 for 循环之前声明 "output" 变量。所以 output = ''
在 for i in range(count):
您每次都在覆盖 output
变量。
虽然您可以使用 output +=
将字节连接在一起,但使用列表可能更安全,在这种情况下,您可以在循环外定义 output = []
,并替换 output = page.extractText()
与 output.append(page.extractTest())
.
此代码有效:
import os, glob, PyPDF2, sys
file_path = 'C:/Users/ipeter/Desktop/Webdriverdownloads'
read_files = glob.glob(os.path.join(file_path,'*.pdf'))
for files in read_files:
pdfReader = PyPDF2.PdfFileReader(files)
count = pdfReader.numPages
output = []
for i in range(count):
page = pdfReader.getPage(i)
output.append(page.extractText())
print(output)
第一个循环读取文件夹中的所有文件。第二个循环读取 pdf 中的所有页面。
output[0] = pdfpage1
output[1] = pdfpage2
output[2] = pdfpage3
... 等等
如果您需要一个字符串中的整个 pdf,您可以保存 newoutput
使用连接函数:
seperator = ','
newoutput = seperator.join(output)
或简化:
newoutput = ','.join(output)
首先尝试将输出创建为空字符串..
output = ""
for i in range(pdfReader.numPages):
pageObj = pdfReader.getPage(i)
output += pageObj.extractText()