在 PyPDF PdfFileReader 中循环遍历页面范围会产生奇怪的循环
Looping through a page range in PyPDF PdfFileReader gives strange loops
我有一个 PDF,它由 4 页组成,我想将它分成单独的文档并根据页码重命名它们。问题是我有一个循环来循环遍历每个页面,基于:for page in range(0, pdfReader.numpages) 但是每次它应该结束时它都会继续并创建重复项。我做了一个打印(页面)来查看发生了什么并得到:
0
1 2 3 0 0 0 0
将范围切换为 range(1, pdfReader.numpages) 使循环 1,2,3 并跳过第一页。使循环 (0, pdfReader.numpages+1) 给出正确的文件输出但给出错误 IndexError: list index out of range
import os, PyPDF2, re, tika, time
from tika import parser
def split_pdf_pages(root_directory, extract_to_folder):
for root, dirs, files in os.walk(root_directory):
for filename in files:
basename, extension = os.path.splitext(filename)
if extension == ".pdf":
fullpath = root + "\" + basename + extension
pdfFileObj = open(fullpath, "rb")
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
for page in range(0, pdfReader.numPages):
print(page)
pdfWriter = PyPDF2.PdfFileWriter()
pageObj = pdfReader.getPage(page)
outputpdf = extract_to_folder + "\" + basename + "-{}.pdf".format(page+1)
pdfWriter.addPage(pageObj)
with open(outputpdf, "wb") as f:
pdfWriter.write(f)
pdfFileObj.close()
我希望得到名为 filename-1、filename-2.pdf 等的文件,但取而代之的是 filename-1、filename-1-1、filename-2、filename2-2 等,除非它是 range(1, pdfReader.numPages) 它工作正常但跳过了第一页!这让我很生气,请帮忙。
我终于弄明白了(抱歉,我只是一个业余爱好者,所以一开始并不明显!)程序循环遍历目录中的每个 PDF(其中提取并重命名的单页包含文档)。如果将范围更改为 range(1, pdfReader.numPages) 它会忽略所有这些新创建的文档,因为它们都是 1 页长!当它设置为 0 时,它包括所有这些新创建的并复制它们。
我所要做的就是将提取和重命名的文件夹移动到不同的目录。现在我已经完成了,感觉真的很明显!我还删除了 pdfFileObj = open(fullpath, "rb") 因为 reader 显然是自动执行的并且现在一切正常!
我有一个 PDF,它由 4 页组成,我想将它分成单独的文档并根据页码重命名它们。问题是我有一个循环来循环遍历每个页面,基于:for page in range(0, pdfReader.numpages) 但是每次它应该结束时它都会继续并创建重复项。我做了一个打印(页面)来查看发生了什么并得到:
0 1 2 3 0 0 0 0
将范围切换为 range(1, pdfReader.numpages) 使循环 1,2,3 并跳过第一页。使循环 (0, pdfReader.numpages+1) 给出正确的文件输出但给出错误 IndexError: list index out of range
import os, PyPDF2, re, tika, time
from tika import parser
def split_pdf_pages(root_directory, extract_to_folder):
for root, dirs, files in os.walk(root_directory):
for filename in files:
basename, extension = os.path.splitext(filename)
if extension == ".pdf":
fullpath = root + "\" + basename + extension
pdfFileObj = open(fullpath, "rb")
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
for page in range(0, pdfReader.numPages):
print(page)
pdfWriter = PyPDF2.PdfFileWriter()
pageObj = pdfReader.getPage(page)
outputpdf = extract_to_folder + "\" + basename + "-{}.pdf".format(page+1)
pdfWriter.addPage(pageObj)
with open(outputpdf, "wb") as f:
pdfWriter.write(f)
pdfFileObj.close()
我希望得到名为 filename-1、filename-2.pdf 等的文件,但取而代之的是 filename-1、filename-1-1、filename-2、filename2-2 等,除非它是 range(1, pdfReader.numPages) 它工作正常但跳过了第一页!这让我很生气,请帮忙。
我终于弄明白了(抱歉,我只是一个业余爱好者,所以一开始并不明显!)程序循环遍历目录中的每个 PDF(其中提取并重命名的单页包含文档)。如果将范围更改为 range(1, pdfReader.numPages) 它会忽略所有这些新创建的文档,因为它们都是 1 页长!当它设置为 0 时,它包括所有这些新创建的并复制它们。
我所要做的就是将提取和重命名的文件夹移动到不同的目录。现在我已经完成了,感觉真的很明显!我还删除了 pdfFileObj = open(fullpath, "rb") 因为 reader 显然是自动执行的并且现在一切正常!