Python TXT文件按条件批量删除行工具

ops/2024/12/18 15:13:52/

Python TXT文本文件批量删除行工具

1.简介:

一个由Python编写的可根据TXT文件按条件批量删除行工具,资源及文件已打包成exe文件,源码也已经分享给大家,喜欢的话可以点个关注哦!
功能:

  • 批量删除行含关键字或词的行(多个关键字/词中间用空格隔开)
  • 批量删除空行
  • 批量字符小于多少(可设定)删除行
  • 批量删除匹配正则的行

使用方法:

  1. 点击打开文件批量选择TXT文件(可以直接拖拽)。
  2. 需要的功能前打勾,并配置。
  3. 点击【执行】即可进行转换。
  4. 最后会生成原文件名+_new.txt的文件。

2.运行效果:

在这里插入图片描述

3.相关源码:

python">import os
import re
import time
from tkinter import ttk, filedialog, messagebox, INSERT, Tk, Button, Text, Scrollbar, \HORIZONTAL, VERTICAL, IntVar, Checkbutton, Label, StringVar, Entry  # 有Combobox、LabelFrame 组件时需要本语句
import windndui_pos = {"title": "TXT文件处理助手","geometry": "450x300",  # 长乘宽}FilePaths = ()def clearAll():ctrl_FileListBox.delete(1.0, "end")  # 清空文件路径str_KeyWord.set("")str_KeyNum.set("")def getTxtFiles():global FilePathsfiles = filedialog.askopenfilenames(filetypes=[('text files', '.txt')])if files:FilePaths = filesfor f_name in files:ctrl_FileListBox.insert('end', f_name)ctrl_FileListBox.insert(INSERT, '\n')else:messagebox.showinfo(title='提示', message='没有选择任何文件!')def KeyWordScan(keys, s):key_words = keys.split(" ")t_f = Falsefor key_word in key_words:if key_word in s:t_f = Truereturn t_fdef ctrl_StartBtn_clicked():has_key_words = int_CheckBox1.get()key_words = str_KeyWord.get()has_empty_line = int_CheckBox2.get()has_N = int_CheckBox3.get()n = str_KeyNum.get()has_zz = int_CheckBox4.get()zz = str_zz.get()try:for file in FilePaths:  # 循环遍历文件s_file = open(os.path.splitext(file)[0] + "_new" + os.path.splitext(file)[1], 'w+')  # 文件保存位置f_lines = open(file, encoding='utf8').readlines()  # 打开文件,读入每一行for s in f_lines:  # s: 每一行的内容# 操作1if has_key_words:if KeyWordScan(key_words, s):continue# 操作2if has_empty_line:if len(s.strip()) == 0:continue# 操作3:if has_N:if len(s.strip()) < int(n):continueif has_zz:if re.match(zz, s.strip()):continues_file.write(s)s_file.close()  # 关闭文件except Exception as e:with open("log", "a+") as f:f.write(time.strftime("%Y-%m-%d, %H:%M:%S", time.localtime()) + "\n")f.write(repr(e) + "\n")def draggedFiles(files):msg = '\n'.join((item.decode('gbk') for item in files))for f_name in files:ctrl_FileListBox.insert('end', f_name)ctrl_FileListBox.insert(INSERT, '\n')print(msg)root = Tk()  # 设定窗体变量
root.geometry(ui_pos["geometry"])  # 格式('宽x高+x+y')其中x、y为位置
root.title(ui_pos["title"])
windnd.hook_dropfiles(root, func=draggedFiles)ctrl_Frame1 = ttk.LabelFrame(root, text='选项')
ctrl_Frame1.place(x=14, y=72, width=388, height=140)ctrl_StartBtn = Button(root, text='执行', font=('宋体', '9'),command=ctrl_StartBtn_clicked)  # 可在括号内加上调用函数部分 ,command=ctrl_StartBtn_clicked
ctrl_StartBtn.place(x=22, y=250, width=72, height=29)ctrl_QuitBtn = Button(root, text='清除', font=('宋体', '9'), command=clearAll)  # 可在括号内加上调用函数部分 ,command=ctrl_QuitBtn_clicked
ctrl_QuitBtn.place(x=108, y=250, width=72, height=29)ctrl_FileListBox = Text(root, font=('宋体', '9'))
ctrl_FileListBox.place(x=14, y=7, width=260, height=38)
ctrl_Scrollbar1 = Scrollbar(root, command=ctrl_FileListBox.xview, orient=HORIZONTAL)
ctrl_Scrollbar1.place(x=14, y=46, width=261, height=16)
ctrl_Scrollbar2 = Scrollbar(root, command=ctrl_FileListBox.yview, orient=VERTICAL)
ctrl_Scrollbar2.place(x=275, y=7, width=16, height=39)
ctrl_FileListBox.config(xscrollcommand=ctrl_Scrollbar1.set, yscrollcommand=ctrl_Scrollbar2.set, wrap='none')int_CheckBox1 = IntVar()  # 绑定变量
ctrl_CheckBox1 = Checkbutton(ctrl_Frame1, text='删除行含关键字或词的行', variable=int_CheckBox1, font=('宋体', '9'))
ctrl_CheckBox1.place(x=14, y=14, height=22)  # 考虑到对齐问题,不列入宽度,需要时手动加入 width=130
ctrl_CheckBox1.deselect()  # 默认为未选中状态Ctrl_Label1 = Label(ctrl_Frame1, text="关键字:")
Ctrl_Label1.place(x=180, y=14, width=55, height=22)str_KeyWord = StringVar()  # 绑定变量
ctrl_KeyWord = Entry(ctrl_Frame1, textvariable=str_KeyWord, font=('宋体', '9'))
ctrl_KeyWord.place(x=230, y=14, width=150, height=22)int_CheckBox2 = IntVar()  # 绑定变量
ctrl_CheckBox2 = Checkbutton(ctrl_Frame1, text='删除空行', variable=int_CheckBox2, font=('宋体', '9'))
ctrl_CheckBox2.place(x=14, y=36, height=22)  # 考虑到对齐问题,不列入宽度,需要时手动加入 width=130
ctrl_CheckBox2.deselect()  # 默认为未选中状态int_CheckBox3 = IntVar()  # 绑定变量
ctrl_CheckBox3 = Checkbutton(ctrl_Frame1, text='删除字符小于N的行', variable=int_CheckBox3, font=('宋体', '9'))
ctrl_CheckBox3.place(x=14, y=58, height=22)  # 考虑到对齐问题,不列入宽度,需要时手动加入 width=130
ctrl_CheckBox3.deselect()  # 默认为未选中状态
# N标签
Ctrl_Label = Label(ctrl_Frame1, text="N =")
Ctrl_Label.place(x=180, y=58, width=55, height=22)
# N
str_KeyNum = StringVar()  # 绑定变量
ctrl_KeyNum = Entry(ctrl_Frame1, textvariable=str_KeyNum, font=('宋体', '9'))
ctrl_KeyNum.place(x=230, y=58, width=30, height=22)int_CheckBox4 = IntVar()  # 绑定变量
ctrl_CheckBox4 = Checkbutton(ctrl_Frame1, text='删除符合正则的行', variable=int_CheckBox4, font=('宋体', '9'))
ctrl_CheckBox4.place(x=14, y=80, height=22)  # 考虑到对齐问题,不列入宽度,需要时手动加入 width=130
ctrl_CheckBox4.deselect()  # 默认为未选中状态# N标签
Ctrl_Label2 = Label(ctrl_Frame1, text="正则:")
Ctrl_Label2.place(x=180, y=80, width=55, height=22)
# N
str_zz = StringVar()  # 绑定变量
ctrl_zz = Entry(ctrl_Frame1, textvariable=str_zz, font=('宋体', '9'))
ctrl_zz.place(x=230, y=80, width=150, height=22)ctrl_OpenFileBtn = Button(root, text='选择文件',font=('宋体', '9'),command=getTxtFiles)  # 可在括号内加上调用函数部分 ,command=ctrl_OpenFileBtn_clicked
ctrl_OpenFileBtn.place(x=305, y=18, width=72, height=29)root.mainloop()

http://www.ppmy.cn/ops/142944.html

相关文章

如何在NGINX中实现基于IP的访问控制(IP黑白名单)?

大家好&#xff0c;我是锋哥。今天分享关于【如何在NGINX中实现基于IP的访问控制&#xff08;IP黑白名单&#xff09;&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何在NGINX中实现基于IP的访问控制&#xff08;IP黑白名单&#xff09;&#xff1f; 1000道 互联网大…

智慧养老系统源码医院陪诊代办买药就医陪护上门护理小程序

市场前景 随着中国社会老龄化的不断加剧&#xff0c;老年人口比例的增加使得他们对医疗和陪护服务的需求日益突出。老年人在就医过程中往往需要更多的帮助和陪伴&#xff0c;而智慧养老陪诊护理系统能够为他们提供便捷、高效的就医辅助服务&#xff0c;满足他们的实际需求。此…

MacOs使用Wine 安装UaExpert与UaExpert的使用

要在 macOS 上使用 Wine 安装和运行 UaExpert&#xff0c;可以按照以下步骤操作&#xff1a; 安装 Wine 在 macOS 上&#xff0c;你可以通过 Homebrew 来安装 Wine。如果你还没有安装 Homebrew&#xff0c;可以先安装 Homebrew&#xff0c;然后使用它来安装 Wine。 bash /bin…

批处理命令的语法与功能

目录 案例一 echo命令语法及应用 案例二 命令语法及应用 案例三 goto命令语法及应用 案例四 pause命令语法及应用 案例五 call命令语法及应用 案例六 start命令语法及应用 案例七 rem命令语法及应用 案例八 if命令语法及应用 案例九 set命令的语法及应用 案例十 setl…

【Redis】Redis 缓存更新策略

1. 更新策略三种方式 缓存更新是redis为了节约内存而设计出来的一个东西&#xff0c;主要是因为内存数据宝贵&#xff0c;当我们向redis插入太多数据&#xff0c;此时就可能会导致缓存中的数据过多&#xff0c;所以redis会对部分数据进行更新&#xff0c;或者把他叫为淘汰更合…

JS设计模式之访问者模式

前言 访问者模式&#xff08;Visitor Pattern&#xff09;是一种 行为设计模式&#xff0c;它允许在不改变对象结构的情况下&#xff0c;定义新的操作。 这种模式通过将操作封装在访问者对象中&#xff0c;使得可以在不修改被访问对象的情况下&#xff0c;增加新的功能。 本…

Git简介和特点

目录 一、Git简介 二、Git特点 1.集中式和分布式 (1)集中式版本控制系统 (2)分布式版本控制系统 2.版本存储方式的差异 (1)直接记录快照&#xff0c;而非差异比较 3.近乎所有操作都是本地执行 一、Git简介 Git是目前世界上最先进的的分布式控制系统&#xff08;没有之一…

【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章

文章目录 线性代数入门&#xff1a;机器学习零基础小白指南前言一、向量&#xff1a;数据的基本单元1.1 什么是向量&#xff1f;1.1.1 举个例子&#xff1a; 1.2 向量的表示与维度1.2.1 向量的维度1.2.2 向量的表示方法 1.3 向量的基本运算1.3.1 向量加法1.3.2 向量的数乘1.3.3…