1

我是一名学习 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)

之前使用 pandas 为 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))`

任何建议将不胜感激提前谢谢

4

3 回答 3

0

我知道这是一个很老的问题,但我自己也有同样的问题。我尝试了 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 具有其文件夹的名称,并将其写入主目录。

于 2020-08-09T04:00:12.420 回答
0

如果您想要将合并文件写入包含您的 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
于 2017-05-03T13:21:51.330 回答
-1

我已经想出了如何循环运行它们

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() 带入循环就可以了!

于 2017-05-05T16:09:34.453 回答