当前位置: 首页 > news >正文

python语言批量XML文件合并工具-标题+内容到TXT软件代码

importtkinterastkfromtkinterimportttk,filedialog,messageboximportosclassXml2TxtMergeTool:def__init__(self,root):# 初始化主窗口self.root=root self.root.title("批量XML文件合并工具(标题+内容→TXT)")self.root.geometry("600x400")# 合理设置窗口大小,操作更舒适# 定义变量存储源文件夹路径和输出TXT文件路径self.source_folder=tk.StringVar()self.output_txt=tk.StringVar()# 创建界面所有控件self.create_widgets()defcreate_widgets(self):# 1. 源文件夹选择区域(存放所有XML文件的文件夹)frame1=ttk.Frame(self.root,padding="20 10 20 10")frame1.pack(fill=tk.X,expand=False)ttk.Label(frame1,text="待合并XML文件夹:").grid(row=0,column=0,sticky=tk.W,padx=5,pady=5)ttk.Entry(frame1,textvariable=self.source_folder,width=40).grid(row=0,column=1,padx=5,pady=5)ttk.Button(frame1,text="选择文件夹",command=self.select_source_folder).grid(row=0,column=2,padx=5,pady=5)# 2. 输出TXT文件选择区域frame2=ttk.Frame(self.root,padding="20 10 20 10")frame2.pack(fill=tk.X,expand=False)ttk.Label(frame2,text="合并后输出TXT文件:").grid(row=0,column=0,sticky=tk.W,padx=5,pady=5)ttk.Entry(frame2,textvariable=self.output_txt,width=40).grid(row=0,column=1,padx=5,pady=5)ttk.Button(frame2,text="保存为",command=self.select_output_txt).grid(row=0,column=2,padx=5,pady=5)# 3. 核心合并按钮区域frame3=ttk.Frame(self.root,padding="20 30 20 30")frame3.pack(fill=tk.BOTH,expand=True)self.merge_btn=ttk.Button(frame3,text="开始合并XML(标题+内容)",command=self.merge_xml_to_txt,style="Accent.TButton")self.merge_btn.pack(expand=True)# 4. 状态提示区域(显示操作进度和结果)frame4=ttk.Frame(self.root,padding="20 10 20 20")frame4.pack(fill=tk.X,expand=False)self.status_label=ttk.Label(frame4,text="状态:未开始",foreground="gray")self.status_label.pack(anchor=tk.CENTER)defselect_source_folder(self):"""弹窗选择存放XML文件的源文件夹"""folder_path=filedialog.askdirectory(title="选择存放所有XML文件的文件夹")iffolder_path:self.source_folder.set(folder_path)self.status_label.config(text=f"状态:已选择源文件夹:{os.path.basename(folder_path)}",foreground="blue")defselect_output_txt(self):"""弹窗选择合并后TXT文件的保存路径和名称"""file_path=filedialog.asksaveasfilename(title="保存合并后的TXT文件",defaultextension=".txt",filetypes=[("文本文档","*.txt"),("所有文件","*.*")])iffile_path:self.output_txt.set(file_path)self.status_label.config(text=f"状态:已选择输出文件:{os.path.basename(file_path)}",foreground="blue")defmerge_xml_to_txt(self):"""核心功能:批量合并XML文件(先标题<文件名>,后对应内容,输出到TXT)"""# 获取输入输出路径并去除首尾空格source_dir=self.source_folder.get().strip()output_path=self.output_txt.get().strip()# 第一步:校验路径有效性ifnotsource_dirornotos.path.isdir(source_dir):messagebox.showerror("错误","请先选择有效的XML文件文件夹!")returnifnotoutput_path:messagebox.showerror("错误","请先选择输出TXT文件的保存路径!")return# 第二步:筛选文件夹内所有XML文件(忽略大小写,兼容.XML/.Xml等格式)xml_files=[]forfilenameinos.listdir(source_dir):# 筛选.xml后缀文件,忽略大小写iffilename.lower().endswith(".xml"):file_full_path=os.path.join(source_dir,filename)# 确保是文件(排除同名文件夹,避免误处理)ifos.path.isfile(file_full_path):xml_files.append((filename,file_full_path))# 存储(文件名,完整路径)# 校验是否存在XML文件ifnotxml_files:messagebox.showwarning("警告","所选文件夹中未找到任何XML文件!")self.status_label.config(text="状态:未找到XML文件,合并失败",foreground="red")return# 按文件名排序,保证合并顺序稳定可追溯xml_files.sort(key=lambdax:x[0])try:# 第三步:以UTF-8编码写入TXT文件(兼容中文文件名和XML内容)withopen(output_path,"w",encoding="utf-8")astxt_file:total_xml=len(xml_files)# 遍历每个XML文件,先写标题(文件名),再写内容forindex,(xml_filename,xml_file_path)inenumerate(xml_files,1):# 1. 写入XML文件标题(文件名,添加分隔线更易区分不同文件)txt_file.write(f"========== 【{xml_filename}】 ==========\n")# 2. 读取XML文件内容并写入TXTwithopen(xml_file_path,"r",encoding="utf-8",errors="ignore")asxml_file:xml_content=xml_file.read()txt_file.write(xml_content)# 每个XML文件内容后添加空行,分隔不同文件,提升可读性txt_file.write("\n\n")# 更新实时合并进度self.status_label.config(text=f"状态:正在合并{index}/{total_xml}个XML文件...",foreground="orange")# 强制刷新界面,确保进度实时显示self.root.update_idletasks()# 合并完成提示messagebox.showinfo("成功",f"XML文件合并完成!\n共合并{total_xml}个XML文件\n输出TXT文件:{output_path}")self.status_label.config(text=f"状态:合并成功!共处理{total_xml}个XML文件",foreground="green")exceptExceptionase:# 异常捕获与友好提示,避免程序崩溃error_info=f"合并失败!错误信息:{str(e)}"messagebox.showerror("错误",error_info)self.status_label.config(text=f"状态:{error_info}",foreground="red")if__name__=="__main__":# 启动GUI程序root=tk.Tk()app=Xml2TxtMergeTool(root)root.mainloop()
http://www.jsqmd.com/news/161432/

相关文章:

  • 基于PyTorch-CUDA-v2.7镜像构建企业级AI服务平台
  • Jupyter和SSH双模式操作PyTorch-CUDA-v2.7镜像详解
  • AI运维宝典:4大关键阶段全解析,附实操步骤与避坑指南,助力大模型成功应用
  • 金融AI风险预警实时性架构设计:AI应用架构师解析流处理技术的5种落地方式
  • feature-dev规划+ralph-loop执行,打造AI编程完全体解决方案
  • RHEL 7.0下载全攻略:轻松获取企业级Linux镜像
  • 【毕业设计】基于SpringBoot的高校餐饮档口管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • AI大模型学习路线图,从入门到实战的全栈指南_大模型AI产品经理学习路线解析,完美!
  • 【必学收藏】RAG检索增强生成:让大模型实时专业回答的终极指南
  • 告别熨烫难题!2025挂烫机排行榜前十名,闭眼入都香的高性价比之选 - 速递信息
  • PyTorch-CUDA-v2.7镜像是否支持Wandb日志追踪
  • 未命名剧本
  • 如何导出PyTorch-CUDA-v2.7镜像用于离线部署
  • 【毕业设计】基于springBoot的高校大学生党建系统设计与实现(源码+文档+远程调试,全bao定制等)
  • PyTorch-CUDA-v2.7镜像中生成PDF格式的技术文档
  • 4 个近期 yyds 的 AI 开源项目,绝了。
  • docker-compose 部署单节点 kafka 4.0 测试环境
  • 将PyTorch模型从实验推向生产:部署全流程解析
  • 【课程设计/毕业设计】基于SpringBoot的食堂管理系统基于SpringBoot的高校餐饮档口管理系统的设计与实现【附源码、数据库、万字文档】
  • 【课程设计/毕业设计】基于SpringBoot高校智慧党建管理系统的设计与实现基于springBoot的高校大学生党建系统设计与实现【附源码、数据库、万字文档】
  • 2025年终证券开户券商推荐:综合实力与客户满意度双维度实测TOP5排名。 - 品牌推荐
  • Java计算机毕设之基于java+springboot+vue电影推荐系统设计与实现springboot+vue影视推荐系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 如何获取Walter Rudin经典数学教材:实分析与复分析完整PDF版
  • 102301210-郑烨的软件工程学期总结
  • 6款AI论文神器实测:效率飙升100%,轻松告别拖延症! - 麟书学长
  • Docker镜像源推荐:PyTorch-CUDA-v2.7一键拉取与部署
  • 2025年终证券开户券商推荐:从产业投行到财富管理的5家高价值券商盘点。 - 品牌推荐
  • Java计算机毕设之基于SpringBoot的高校餐饮档口管理系统的设计与实现基于SpringBoot的大学食堂管理系统的设计和实现(完整前后端代码+说明文档+LW,调试定制等)
  • 2025年终手机炒股券商推荐:交易体验与投顾服务双维度实测TOP5排名。 - 品牌推荐
  • 2025年AI大模型学习路线图:从零基础到专家的完整指南_AI大模型学习路线(非常详细)收藏这一篇就够了!