使用 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)
之前使用 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))`
任何建议将不胜感激
提前致谢
如果您想要将合并的文件写入包含您的 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
我想出了如何 运行 它们循环
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")
将 merger=PdfMerger() 带入循环中就成功了!!
我知道这是一个很老的问题,但我自己也遇到过同样的问题。我尝试了 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 有其文件夹的名称,并且已写入主目录。
我是一名开发新手,正在学习 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))`
任何建议将不胜感激 提前致谢
如果您想要将合并的文件写入包含您的 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
我想出了如何 运行 它们循环
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")
将 merger=PdfMerger() 带入循环中就成功了!!
我知道这是一个很老的问题,但我自己也遇到过同样的问题。我尝试了 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 有其文件夹的名称,并且已写入主目录。