[英]Recursively merge pdf's in subfolders using the pyPDF2 module in python
我是一名学习 Python 的新手开发人员,我正在尝试递归解析包含多个 pdf 的文件夹和子文件夹,并根据子文件夹名称将它们合并为一个 pdf。 我有以下文件夹和子文件夹结构
合并前的文件夹
dummy
ball
ball_baseball.pdf
ball_basketball.pdf
ball_volleyball.pdf
ice
ice_skating.pdf
ice_curling.pdf
ice_hockey.pdf
id 喜欢看到的理想结果是
dummy
ball
ball.pdf(containing 3 sheets)
ice
ice.pdf (containing 3 sheets)
以前使用熊猫回答了 csv 文件的问题字符串。但是我使用 PyPDf 来合并 pdf'f 这是我迄今为止尝试过的代码。 它似乎有效,但我可能弄乱了 for 循环,因此递归地附加和合并子文件夹中的 pdf
import sys, os,PyPDf2
from PyPDF2 import PdfFileMerger, PdfFileReader
dirs=r"path to the folder directory"
for root,dirs,files in os.walk(dirs):
merger = PdfFileMerger()
for filename in files:
if filename.endswith(".pdf"):
filepath = os.path.join(root, filename)
merger.append(PdfFileReader(open(filepath, 'rb')))
merger.write(str(filename))`
任何建议将不胜感激提前致谢
如果您想要的是将合并文件写入包含 Python 脚本的文件夹而不是子文件夹,则需要进行一些调整:
import sys, os,PyPDf2
from PyPDF2 import PdfFileMerger, PdfFileReader
hdir=r #path to the folder directory; would suggest using os.getcwd()
for root,dirs,files in os.walk(hdir):
#changed so that directories thrown by os.walk are not the same as start
merger = PdfFileMerger()
for dir in dirs:
for filename in files:
if filename.endswith(".pdf"):
filepath = os.path.join(root, filename)
merger.append(PdfFileReader(open(filepath, 'rb')))
#merger.write(str(filename))
merger.write(os.path.join(hdir,dir+'.pdf'))
#writes to the main directory, names the merged file after the subdirectory
我知道这是一个很老的问题,但我自己也遇到了同样的问题。 我尝试了 C. Taylor 的解决方案,但最终出现了一些错误。 无论如何,以下代码对我有用。
import sys, os,PyPDf2
from PyPDF2 import PdfFileMerger, PdfFileReader
print("testing ")
hdir=os.getcwd()
for root,dirs,files in os.walk(hdir):
merger = PdfFileMerger()
for filename in files:
if filename.endswith(".pdf"):
print(filename)
filepath = os.path.join(root, filename)
merger.append(PdfFileReader(open(filepath, 'rb')))
merger.write(os.path.join(hdir,os.path.basename(os.path.normpath(root))+'.pdf'))
合并后的 PDF 具有其文件夹的名称,并将其写入主目录。
我已经想出如何在循环中运行它们
rootDir=r"path to your directory"
for dirName,subDir, fileList in os.walk(rootDir, topdown=False):
merger = PdfFileMerger()
for fname in fileList:
merger.append(PdfFileReader(open(os.path.join(dirName, fname),'rb')))
merger.write(str(dirName)+".pdf")
将 merge= PdfMerger() 带入循环就成功了!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.