在for循环Python中应用UDF

2024-03-29 15:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

PDF示例:“Smith#00$Consolidated_性能.pdf““

目标是根据文件名在每个PDF的第1页添加书签。在

(示例中的书签名称为“Consolidated Performance”)

import os
from openpyxl import load_workbook
from PyPDF2 import PdfFileMerger

cdir = "Directory of PDF" # Current directory
pdfcdir = [filename for filename in os.listdir(cdir) if filename.endswith(".pdf")]

def addbookmark(f):
    output = PdfFileMerger()
    name = os.path.splitext(os.path.basename(f))[0] # Split filename from .pdf extension
    dp = name.index("$") + 1 # Find position of $ sign
    bookmarkname = name[dp:].replace("_", " ") # replace underscores with spaces
    output.addBookmark(bookmarkname, 0, parent=None) # Add bookmark
    output.append(open(f, 'rb'))
    output.write(open(f, 'wb'))

for f in pdfcdir:
    addbookmark(f)

当应用于单个PDF时,UDF工作得很好,但当放入代码底部的循环时,它不会添加书签。关于如何使UDF循环遍历pdfcdir中的所有pdf有什么想法吗?在


Tags: ofnamefromimport示例outputpdfos
1条回答
网友
1楼 · 发布于 2024-03-29 15:27:19

我很确定你现在遇到的问题与循环无关。相反,您只传递文件名,而不包括目录路径。它试图在脚本的当前工作目录(默认情况下是脚本所在的目录)中打开这些文件,而不是从中读取文件名的目录中。在

因此,在调用函数时,将目录名与每个文件名连接起来。在

for f in pdfcdir:
    addbookmark(os.path.join(cdir, f))

相关问题 更多 >