如何互换使用 glob.glob("*PDF) 和 os.listdr("./directory")?

How can I interchangeably use glob.glob("*PDF) and os.listdr("./directory")?

我正在尝试合并文件夹中的 PDF 文件

我尝试了 运行 来自同一目录的代码并且它有效但是当我将代码复制到不同的位置并指定 PDF 文件的目录路径时,合并过程没有发生并且我不断得到错误。

from PyPDF2 import PdfFileMerger
import glob

x = glob.glob("*pdf")
merger = PdfFileMerger()
 
for pdf in x:
    merger.append(open(pdf, 'rb'))
 
with open("result.pdf", "wb") as fout:
    merger.write(fout)

这是我在源代码文件夹位置向上一个文件夹时编写的代码

x = [a for a in os.listdir('./merge_pdf') if a.endswith(".pdf")]
for pdf in x:
    merger.append(open(pdf, 'rb'))
 
with open("./merge_pdf/result.pdf", "wb") as fout:
    merger.write(fout)

--->FileNotFoundError: [Errno 2] No such file or directory: '1.pdf'

因此,我 运行 我的所有代码都在我的 PDF 文件夹中,我知道这不是一个好习惯。

谁能帮我解决这个问题,我只是在早期学习阶段。

我也试过这个

with open("result.pdf", "wb") as fout:
    merger.write("./merge_pdf/"+fout)

glob.glob returns 文件的完整路径,而 os.listdir 只给出文件名。坚持使用 glob。

from PyPDF2 import PdfFileMerger
import glob

x = glob.glob("merge_pdf/*pdf")
merger = PdfFileMerger()
 
for pdf in x:
    merger.append(open(pdf, 'rb'))
 
with open("merge_pdf/result.pdf", "wb") as fout:
    merger.write(fout)

另一个不错的选择是 pathlib 模块。

from PyPDF2 import PdfFileMerger
from pathlib import Path

dir_path = Path("merge_pdf")
result_pdf = dir_path/"result.pdf"

merger = PdfFileMerger()
 
for pdf in dir_path.glob("*pdf"):
    merger.append(pdf.open('rb'))
 
with result_pdf.open("wb") as fout:
    merger.write(fout)