You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python提取PDF内JP2图片:如何通过write()指定自定义文件名防覆盖

解决PDF提取图片重名覆盖问题的两种方法

方法一:直接生成带PDF前缀的自定义文件名

直接在保存时把原PDF的文件名(不含扩展名)和图片名拼接,就能避免不同PDF的图片重名覆盖。修改代码中open()的文件名参数即可:

from PyPDF2 import PdfReader
from pathlib import Path

pdfdirpath = Path('C:/Users/...')

pathlist = pdfdirpath.glob('*.pdf')

for path in pathlist:
    reader = PdfReader(path)
    # 获取PDF文件名(不含后缀)作为前缀
    pdf_filename = path.stem
    for page in reader.pages:
        for image in page.images:
            # 拼接成新文件名:PDF文件名_原图片名
            new_image_name = f"{pdf_filename}_{image.name}"
            with open(new_image_name, "wb") as fp:
                fp.write(image.data)

比如处理名为report.pdf的文件时,提取的图片会变成report_im1.jp2、report_im2.jp2,这样下次处理其他PDF时就不会覆盖旧文件。

如果想把图片保存到指定目录,还可以结合路径:

# 比如保存到和PDF同目录下的images子文件夹
save_dir = pdfdirpath / "images"
save_dir.mkdir(exist_ok=True)  # 不存在就创建文件夹
new_image_path = save_dir / f"{pdf_filename}_{image.name}"
with open(new_image_path, "wb") as fp:
    fp.write(image.data)

方法二:先保存再重命名

如果一定要先按原image.name保存,之后再重命名,可以用Path的rename()方法:

from PyPDF2 import PdfReader
from pathlib import Path

pdfdirpath = Path('C:/Users/...')

pathlist = pdfdirpath.glob('*.pdf')

for path in pathlist:
    reader = PdfReader(path)
    pdf_filename = path.stem
    for page in reader.pages:
        for image in page.images:
            # 先按原名字保存
            temp_path = Path(image.name)
            with open(temp_path, "wb") as fp:
                fp.write(image.data)
            # 重命名为带PDF前缀的名字
            new_path = Path(f"{pdf_filename}_{image.name}")
            temp_path.rename(new_path)

这种方法多了一步重命名操作,不如方法一直接高效,适合有特殊流程需求的场景。

内容的提问来源于stack exchange,提问作者user20880339

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:11:04