繁体   English   中英

使用python中的pyPDF2模块递归合并子文件夹中的pdf

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM