python 图形界面多个WORD按名字排序合并成一个WORD

python 复制代码
import wx
import os
import re
import datetime  # 导入时间模块,用于生成时间格式文件名
import win32com.client as win32
from docx import Document
from natsort import natsorted  # 导入自然排序库,解决数字文件名乱序问题

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(400, 200))
        panel = wx.Panel(self)
        
        self.dir_picker = wx.DirPickerCtrl(panel, style=wx.DIRP_DIR_MUST_EXIST)
        self.btn_merge = wx.Button(panel, label='合并')
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.StaticText(panel, label='选择要合并的文件夹:'), 0, wx.ALL, 5)
        sizer.Add(self.dir_picker, 0, wx.EXPAND|wx.ALL, 5)
        sizer.Add(self.btn_merge, 0, wx.ALIGN_CENTER|wx.ALL, 5)
        
        panel.SetSizer(sizer)
        self.Bind(wx.EVT_BUTTON, self.on_merge, self.btn_merge)
    def natural_sort_key(self, filename):
        #自定义自然排序键,支持中英文、数字混合文件名排序"""​
        # 分离文件名中的数字和非数字部分,用于精准排序​
        parts = re.split('(\d+)', filename)
        # 数字部分转为整数,非数字部分保留字符串,实现自然排序​
        return [int(part) if part.isdigit() else part.lower() for part in parts] 
     
    def on_merge(self, event):
        folder_path = self.dir_picker.GetPath()
        if not os.path.exists(folder_path):
            wx.MessageBox('指定的文件夹不存在!', '错误', wx.OK | wx.ICON_ERROR)
            return
        
        try:
           merged_doc = Document()  # 创建新文档
           # 筛选出文件夹中的docx文件,并按自然排序排列
           docx_files = [f for f in os.listdir(folder_path) if f.lower().endswith(".docx")]
           # 两种排序方式可选,推荐自然排序(适配数字文件名)
           # 方式1:自然排序(需安装natsort库,更精准)
           sorted_files = natsorted(docx_files)
            # 方式2:自定义自然排序(无需额外安装库,适配大部分场景)
            # sorted_files = sorted(docx_files, key=self.natural_sort_key)
           if not sorted_files:
              wx.MessageBox('文件夹中无DOCX文件可合并!', '提示', wx.OK | wx.ICON_INFORMATION)
              return
           for filename in sorted_files:
                file_path = os.path.join(folder_path, filename)
                doc = Document(file_path)
                # 为每个文件添加标题(可选,便于区分不同文件内容)
                merged_doc.add_heading(filename, level=2)
                # 复制每个段落到合并文档,保留原格式
                for paragraph in doc.paragraphs:
                    new_para = merged_doc.add_paragraph()
                    for run in paragraph.runs:
                         new_run = new_para.add_run(run.text)
                         new_run.bold = run.bold
                         new_run.italic = run.italic
                         new_run.underline = run.underline
                         new_run.font.name = run.font.name
                         new_run.font.size = run.font.size
                         new_run.font.color.rgb = run.font.color.rgb
                # 每个文件结束后添加分页符(可选,避免内容粘连)
                merged_doc.add_page_break()
           current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]  # 截取前17位,去掉微秒后3位,保留毫秒
           # 优化导出文件名,拼接时间戳,避免重复
           merged_filename = f'合并后的文档_{current_time}.docx'
           # 保存合并后的文件,路径改为与源文件夹同目录,便于查找
           merged_path = os.path.join(folder_path, merged_filename)
           merged_doc.save(merged_path)
           wx.MessageBox(f'合并完成!{merged_filename}文件保存至:\n{merged_path}', '成功', wx.OK | wx.ICON_INFORMATION)
        except Exception as e:
            wx.MessageBox(f'合并过程中发生错误:{str(e)}', '错误', wx.OK | wx.ICON_ERROR)
app = wx.App()
frame = MyFrame(None, 'DOC文件合并')
frame.Show()
app.MainLoop()

摘要:该代码实现了一个DOCX文档合并工具,使用wxPython创建GUI界面。主要功能包括:1) 选择文件夹路径并自动识别所有DOCX文件;2) 采用自然排序算法(natsorted)处理文件名;3) 保留原文档格式(字体、颜色等样式)合并内容;4) 自动添加分页符和文件名标题;5) 生成带时间戳的合并文件。程序具有错误处理机制,支持中英文和数字混合文件名的精准排序,最终将合并文档保存在原文件夹中。

相关推荐
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--Pytest框架钩子函数
python·学习·测试工具·pytest
喵手2 小时前
Python爬虫零基础入门【第九章:实战项目教学·第5节】SQLite 入库实战:唯一键 + Upsert(幂等写入)!
爬虫·python·sqlite·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·sqlite入库实战
DN20202 小时前
好用的机器人销售供应商
python
爬山算法2 小时前
Hibernate(64)如何在Java EE中使用Hibernate?
python·java-ee·hibernate
lixin5565562 小时前
基于迁移学习的图像分类增强器
java·人工智能·pytorch·python·深度学习·语言模型
翱翔的苍鹰3 小时前
多Agent智能体架构设计思路
人工智能·pytorch·python
小毅&Nora3 小时前
【后端】【Python】① Windows系统下Python环境变量设置指南
python·pip
Rabbit_QL10 小时前
【水印添加工具】从零设计一个工程级 Python 图片水印工具:WaterMask 架构与实现
开发语言·python
大王小生10 小时前
说说CSV文件和C#解析csv文件的几种方式
人工智能·c#·csv·csvhelper·csvreader