合并多个文本文件

news2025/1/10 17:01:31

使用 wxPython 模块合并多个文本文件的博客。以下是一篇示例博客:
C:\pythoncode\blog\txtmerge.py

在这里插入图片描述

在 Python 编程中,我们经常需要处理文本文件。有时候,我们可能需要将多个文本文件合并成一个文件,以便进行进一步的处理或分析。在本文中,我们将介绍如何使用 wxPython 模块编写一个简单的程序,能够让用户选择多个文本文件,并按选择的先后顺序将它们合并成一个文件。

准备工作

首先,我们需要安装 wxPython 模块。您可以使用以下命令来安装:

pip install wxPython

安装完成后,我们可以开始编写程序。

编写程序

我们将使用 wxPython 模块创建一个简单的 GUI 程序。用户可以通过该程序选择要合并的文本文件,并按选择的先后顺序将它们合并成一个文件。

以下是程序的代码:

import wx
import datetime
import os

class MergeApp(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="文档合并工具", size=(400, 300))
        
        self.panel = wx.Panel(self)
        
        self.file_list = wx.ListBox(self.panel, style=wx.LB_MULTIPLE)
        self.merge_button = wx.Button(self.panel, label="合并文档")
        self.merge_button.Bind(wx.EVT_BUTTON, self.on_merge)
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.file_list, 1, wx.EXPAND | wx.ALL, 10)
        self.sizer.Add(self.merge_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        
        self.panel.SetSizer(self.sizer)
        
    def on_merge(self, event):
        selected_files = self.file_list.GetSelections()
        if len(selected_files) < 2:
            wx.MessageBox("请选择至少两个文档进行合并!", "错误", wx.OK | wx.ICON_ERROR)
            return
        
        merged_content = ""
        
        for index in selected_files:
            file_path = self.file_list.GetString(index)
            with open(file_path, "r", encoding="utf-8") as file:
                merged_content += file.read()
        
        merge_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        merge_filename = f"merge_{merge_datetime}.txt"
        
        with open(merge_filename, "w", encoding="utf-8") as merged_file:
            merged_file.write(merged_content)
        
        wx.MessageBox(f"文档合并完成,合并文档保存为 {merge_filename}!", "完成", wx.OK | wx.ICON_INFORMATION)
        
        self.Close()
        
if __name__ == "__main__":
    app = wx.App()
    frame = MergeApp()
    
    wildcard = "Text files (*.txt)|*.txt"
    dialog = wx.FileDialog(None, message="请选择要合并的文档", wildcard=wildcard, style=wx.FD_OPEN | wx.FD_MULTIPLE)
    
    if dialog.ShowModal() == wx.ID_OK:
        file_paths = dialog.GetPaths()
        frame.file_list.AppendItems(file_paths)
    
    dialog.Destroy()
    
    frame.Show()
    app.MainLoop()

运行程序

保存上述代码为 merge_app.py 文件。然后,在命令行中运行以下命令启动程序:

python merge_app.py

程序窗口将显示出来,您可以点击 “浏览” 按钮选择要合并的文本文件。选择的文件将显示在列表框中。选择至少两个文件后,点击 “合并文档” 按钮,程序将按选择的先后顺序将文件内容合并成一个新的文本文件,并在弹出消息框中显示合并完成的信息。

全部代码

import wx
import datetime
import os

class MergeApp(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="文档合并工具", size=(400, 300))
        
        self.panel = wx.Panel(self)
        
        self.file_list = wx.ListBox(self.panel, style=wx.LB_MULTIPLE)
        self.merge_button = wx.Button(self.panel, label="合并文档")
        self.merge_button.Bind(wx.EVT_BUTTON, self.on_merge)
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.file_list, 1, wx.EXPAND | wx.ALL, 10)
        self.sizer.Add(self.merge_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        
        self.panel.SetSizer(self.sizer)
        
    def on_merge(self, event):
        selected_files = self.file_list.GetSelections()
        if len(selected_files) < 2:
            wx.MessageBox("请选择至少两个文档进行合并!", "错误", wx.OK | wx.ICON_ERROR)
            return
        
        merged_content = ""
        
        for index in selected_files:
            file_path = self.file_list.GetString(index)
            with open(file_path, "r", encoding="utf-8") as file:
                merged_content += file.read()
        
        merge_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        merge_filename = f"merge_{merge_datetime}.txt"
        
        with open(merge_filename, "w", encoding="utf-8") as merged_file:
            merged_file.write(merged_content)
        
        wx.MessageBox(f"文档合并完成,合并文档保存为 {merge_filename}!", "完成", wx.OK | wx.ICON_INFORMATION)
        
        self.Close()
        
if __name__ == "__main__":
    app = wx.App()
    frame = MergeApp()
    
    wildcard = "Text files (*.txt)|*.txt"
    dialog = wx.FileDialog(None, message="请选择要合并的文档", wildcard=wildcard, style=wx.FD_OPEN | wx.FD_MULTIPLE)
    
    if dialog.ShowModal() == wx.ID_OK:
        file_paths = dialog.GetPaths()
        frame.file_list.AppendItems(file_paths)
    
    dialog.Destroy()
    
    frame.Show()
    app.MainLoop()

总结

通过使用 wxPython 模块,我们编写了一个简单的程序,可以方便地合并多个文本文件。该程序提供了一个用户友好的界面,使用户能够轻松选择文件并进行合并操作。您可以根据自己的需求对代码进行修改和扩展,以满足更具体的要求。

希望这篇博客对您有所帮助!如果您有任何其他问题,请随时提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/898366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的配置文件my.cnf与my.ini

一、my.cnf与my.ini win系统&#xff0c;MySQL配置文件为my.ini 其他系统&#xff08;Ubuntu、CentOS、macOS)MySQL配置文件为my.cnf 二、my.cnf与my.ini的路径 2.1 默认路径 MySQL 的配置文件 my.cnf 可能位于多个位置&#xff0c;具体取决于安装方式和操作系统。以下是一…

《HeadFirst设计模式(第二版)》第十章代码——状态模式

如下图所示&#xff0c;这是一个糖果机的状态机图&#xff0c;要求使用代码实现&#xff1a; 初始版本&#xff1a; package Chapter10_StatePattern.Origin;/*** Author 竹心* Date 2023/8/19**/public class GumballMachine {final static int SOLD_OUT 0;final static int…

【编织时空四:探究顺序表与链表的数据之旅】

本章重点 链表的分类 带头双向循环链表接口实现 顺序表和链表的区别 缓存利用率参考存储体系结构 以及 局部原理性。 一、链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非…

【论文解读】Observation-Centric SORT:Rethinking SORT for Robust Multi-Object Tracking

一.介绍 1.1 之前卡尔曼方法存在的问题&#xff1a; 1.长时间的运动的线性估计可能是非常不准确的。2.当没有可用于更新卡尔曼滤波器参数的测量时&#xff0c;标准惯例是信任先验状态估计进行后验更新&#xff0c;这导致了在一段时间内错误的积累。 1.2 基于假设 假设跟踪目…

ARM体系结构学习笔记:位操作和灵活的2nd操作数

位操作 移位运算 数据传输指令 灵活的2nd操作数 Set a bit a | (1 << 5)Clear a bit a & ~(1 << 5)Toggling a bt a ^ 1<<5

IDEA开发项目时一直出现http404错误的解决方法

系列文章目录 安装cv2库时出现错误的一般解决方法_cv2库安装失败 SQL&#xff1e; conn sys/root as sysdbaERROR:ORA-12560: TNS: 协议适配器错误的解决方案 虚拟机启动时出现“已启用侧通道缓解”的解决方法 Hypervisor launch failed&#xff1b; Processor does not pr…

数据的绘画工场:Python绘图库Pyecharts,打造引人入胜的可视化效果

欢迎阅读本篇文章&#xff0c;本文将带您从零开始&#xff0c;逐步掌握使用Pyecharts库进行数据可视化的技能。Pyecharts是一个基于Echarts的Python可视化库&#xff0c;能够轻松创建各种交互式图表和地图&#xff0c;无论您是数据分析新手还是有经验的开发者&#xff0c;本文都…

【计算机视觉】相机基本知识(还在更新)

1.面阵工业相机与线阵工业相机 1.1 基本概念区别 面阵相机则主要采用的连续的、面状扫描光线来实现产品的检测&#xff1b; 线阵相机即利用单束扫描光来进行物体扫描的工作的。 1.2 优缺点 &#xff08;1&#xff09;面阵CCD工业相机&#xff1a; 优点&#xff1a;应用面…

ZooKeeper集群服务器启动

在本文中&#xff0c;我们将对集群版ZooKeeper服务器的启动过程做详细讲解。集群和单机ZooKeeper服务器的启动过程在很多地方都是一致的&#xff0c;因此本节只会对有差异的地方展开进行讲解。下图所示是集群版ZooKeeper服务器的启动流程图。 预启动 预启动的步骤如下。 (1)统…

财报解读:上半年业绩实现增长,药师帮业务飞轮已经开始旋转?

今年6月底登陆港股的药师帮&#xff0c;近日发布了上市后的首份财务报告。 财报显示&#xff0c;2023年上半年&#xff0c;药师帮实现营收增长、经调整后净利润转正的成果&#xff0c;再次验证了二级市场对于其发展潜力的看好——6月底上市以来&#xff0c;药师帮股价涨幅接近…

Mybatis的学习笔记(IDEA快捷键,参数占位符,转义符)

一、IDEA快捷键&#xff1a; IDEA多行注释&#xff1a;ctrlShift/ 单行注释&#xff1a;ctrl/ 导入包&#xff0c;自动修正代码&#xff1a;altenter 自动生成代码&#xff1a;altinsert 二、Mybatis重要知识点&#xff1a; 2.1 参数占位符 一共分为2种&#xff1a;#{}和…

idea2023 springboot+mybatis+jsp 初学单表增删改查

创建项目 因为2.7.14使用量较少&#xff0c;特更改spring-boot为2.7.5版本 配置端口号 打开Sm01Application类&#xff0c;右键运行启动项目&#xff0c;或者按照如下箭头启动 启动后&#xff0c;控制台提示如下信息表示成功 此刻在浏览器中输入&#xff1a;http://lo…

盘点市面上的ipad协议对比

友情链接 geweapi.com 点击即可访问! Web网页端&#xff1a;2017年后不再支持新号登录&#xff0c;仅支持老号&#xff0c;并且掉线严重&#xff0c;功能缺失严重。 Xposed技术&#xff1a;在2019年6月份&#xff0c;微信官方在行业重点打击Xposed&#xff0c;自此行业内一片…

企望制造ERP系统 RCE漏洞[2023-HW]

企望制造ERP系统 RCE漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC检测 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;…

IO day 4

1、使用两个进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;并且父进程要阻塞回收子进程资源 #include <myhead.h>int main(int argc, const char *argv[]) {char a[1] {0};pid_t pid;pid fork();//创建一个子进…

马哈鱼数据血缘工具背后的项目: gsp_demo_java 项目简单介绍与使用

0.背景 马哈鱼数据血缘工具(https://www.sqlflow.cn/)是SQLflow工具的中文译名,实际就是sqlflow. 对于SQL flow来说,底层调用的是General SQL Parser(GSP https://sqlparser.com) 的库. 这个gsp有开源的java demo项目:https://github.com/sqlparser/gsp_demo_java 1.快速使用…

Focus-DETR利用双重注意力机制重建编码器,打造最强目标检测模型

前期的文章我们介绍了DETR模型,我们知道DETR模型首先使用CNN卷积神经网络搜集图片的核心特征点,然后把这些特征点整合起来,通过embedding方法,把特征图片转换到特征向量空间。然后根据标准Transformer模型的编码器与解码器进行注意力机制的计算,最后把计算后的数据进行图片…

vue3+ts+vite使用el-breadcrumb实现面包屑组件,实现面包屑过渡动画

简介 使用 element-plus 的 el-breadcrumb 组件&#xff0c;实现根据页面路由动态生成面包屑导航&#xff0c;并实现面包屑导航的切换过渡动画 一、先看效果加粗样式 1.1 静态效果 1.2 动态效果 二、全量代码 <script lang"ts" setup> import { ref, watch…

5个高清视频素材网站

推荐5个高清视频素材网站&#xff0c;免费、付费、商用的都有&#xff0c;可根据自己需求去选择&#xff0c;赶紧收藏吧&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky ​ 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff…

RCE远程命令执行

逻辑运算符:: &&&#xff1a;代表首先执行命令a&#xff0c;若成功再执行命令b&#xff0c;又被称为短路运算符。 &&#xff1a;代表首先执行命令a再执行命令b&#xff0c;不管a是否成功&#xff0c;都会执行命令b。在执行效率上来说“&&”更加高效。 ||&a…