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

Python合并文件夹PDF时排序与文件夹内顺序不符问题求助

解决PDF合并顺序与文件夹显示不一致的问题

你的代码能正常合并PDF,但os.listdir()返回的文件名是系统默认的字典序,和文件夹里的自然排序(比如数字按数值大小排列)不匹配,导致合并顺序错乱。

修复方案

方法1:使用natsort库(推荐,简单高效)

先安装依赖库:

pip install natsort

修改后的代码:

import os
from PyPDF2 import PdfMerger
from natsort import natsorted

def combine_pdfs_from_folder(input_folder, output_path):
    pdf_merger = PdfMerger()

    # 用自然排序对PDF文件名排序
    pdf_files = natsorted([f for f in os.listdir(input_folder) if f.endswith('.pdf')])
    
    for filename in pdf_files:
        pdf_merger.append(os.path.join(input_folder, filename))

    with open(output_path, 'wb') as output_file:
        pdf_merger.write(output_file)

    print("PDF files combined successfully.")

if __name__ == "__main__":
    input_folder = r'E:\SRPlabel - 116843_C_3s'  # 加r前缀避免转义字符解析问题
    output_path = 'C:/tempo/merged.pdf'

    combine_pdfs_from_folder(input_folder, output_path)

方法2:纯Python实现自然排序(无需额外库)

如果不想安装第三方库,可以自定义排序键函数,提取文件名中的数字部分按数值排序:

import os
from PyPDF2 import PdfMerger
import re

def natural_sort_key(s):
    # 拆分字符串为数字和非数字片段,数字转整数用于排序
    parts = re.split(r'(\d+)', s)
    return [int(part) if part.isdigit() else part.lower() for part in parts]

def combine_pdfs_from_folder(input_folder, output_path):
    pdf_merger = PdfMerger()

    # 用自定义自然排序键对文件名排序
    pdf_files = sorted([f for f in os.listdir(input_folder) if f.endswith('.pdf')], key=natural_sort_key)
    
    for filename in pdf_files:
        pdf_merger.append(os.path.join(input_folder, filename))

    with open(output_path, 'wb') as output_file:
        pdf_merger.write(output_file)

    print("PDF files combined successfully.")

if __name__ == "__main__":
    input_folder = r'E:\SRPlabel - 116843_C_3s'
    output_path = 'C:/tempo/merged.pdf'

    combine_pdfs_from_folder(input_folder, output_path)

额外说明

  • 输入路径添加r前缀是为了避免路径中的转义字符(比如\S)被解析为特殊字符,引发路径错误。
  • 两种方案都能让文件名按自然顺序排列,和文件夹内显示的顺序完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:12:37