一键去除txt文本重复行(带界面版)

需求

  1. 去除txt文件内的重复行
  2. 保存去除后的文件
  3. 打开文件选择框
  4. 打开保存后的文件所处位置
  5. 如无重复行不进行任何处理
  6. 带界面,选择文件后界面显示文件内容
  7. 去除重复行后显示文件内容
  8. 多线程处理
  9. 打包成可执行文件exe
  10. 源码不准超过一百五十行

效果样板

初始界面

在这里插入图片描述

测试txt文件

文件大小为200多k,一万多行,开启速度毫无卡顿,处理也无卡顿。
在这里插入图片描述
文本内容
在这里插入图片描述
开始测试,点击选择文件,进入文件选择窗口。
在这里插入图片描述
选择文件后自动读取文件内容,界面可视化文件内容。
在这里插入图片描述
选择文件按钮隐藏,替换为去除重复行按钮。点击去除重复行,将结果显示在界面上。
在这里插入图片描述
打开文件所在位置,会生成一个前缀为“new_”的新txt文件,后缀与源文文件名一样,可多次生成,并自动覆盖。在这里插入图片描述
在这里插入图片描述

视频演示

在这里插入图片描述

项目源码链接

源码

# %%writefile txt_remove.py
# -*- coding:utf-8 -*-
#----W.Cxk----
import tkinter
from tkinter import filedialog
import os,sys,threading
import base64
from multiprocessing import Process

def read_txt():
    global all_lines,result_lines
    result_lines=[]
    try:
        [result_lines.append(i) for i in all_lines if not i in result_lines or i =='\n']
        return result_lines,len(all_lines)-len(result_lines)
    except:
        pass
        
def write_txt(txt_path,save_path):
    global result_lines
    result_lines,line_number=read_txt()
    if line_number==0:
        pass
    else:
        with open(save_path,"a+") as f:
            for i in [i for i in result_lines if i !='\n']:
                f.write(i)
            
def btnCallBack():
    global result_lines,save_path,txt_path
    
    thread_it(write_txt,txt_path,save_path)
    
    strs = ''.join([i for i in result_lines if i !='\n'])
    text_new.insert(tkinter.INSERT, strs)
    text_new.configure(state=tkinter.DISABLED)
    
    btn1.pack(pady=6)
    btn.pack_forget()
    btn2.pack(pady=6)


def thread_it(func, *args):
    '''将函数打包进线程'''
    # 创建
    t = threading.Thread(target=func, args=args) 
    # 守护 !!!
    t.setDaemon(True) 
    # 启动
    t.start()
    # 阻塞--卡死界面!
    # t.join()
    
def chiose_txt_file():
    global txt_path,save_path,all_lines
    txt_path=""
    text_old.configure(state=tkinter.NORMAL)
    text_new.configure(state=tkinter.NORMAL)
    text_new.delete('1.0','end')
    text_old.delete('1.0','end')
    all_lines=[]
    root_path = sys.path[0]
    try:
        txt_path = tkinter.filedialog.askopenfilename(title=u'选择txt文件',initialdir=(os.path.expanduser(txt_path)))
        with open(txt_path,"r") as f:
            all_lines=f.readlines()
        if "\n" not in all_lines[len(all_lines)-1]:
            all_lines[len(all_lines)-1]=all_lines[len(all_lines)-1]+"\n"
        filepath,tempfilename = os.path.split(txt_path)
        save_path=filepath+os.sep+"new_"+txt_path.split("/")[-1]
        if os.path.exists(save_path):
            os.remove(save_path)
        
        strs = ''.join(all_lines)
        text_old.insert(tkinter.INSERT, strs)
        text_old.configure(state=tkinter.DISABLED)
        btn1.pack_forget()
        btn.pack(pady=6)
        btn2.pack_forget()
        
    except Exception  as e:
        pass

def open_dir():
    global save_path
    filepath, tempfilename = os.path.split(save_path)
    os.startfile(filepath)

if __name__ == "__main__":
    global all_lines,result_lines,txt_path,save_path
    win = tkinter.Tk()
    win.title("cxk文本去重")
    #文本转图标
    #with open('test.ico','wb') as f:
    	##此处是base64转图标,文本过长,不放上来了
        #f.write(base64.b64decode("AAABAA----sAAAAAAA"))
    #win.iconbitmap('test.ico')
    #os.remove('test.ico')
    sw = win.winfo_screenwidth()
    #得到屏幕宽度
    sh = win.winfo_screenheight()
    #得到屏幕高度
    ww = 550
    wh = 550
    #窗口宽高
    x = (sw-ww) / 2
    y = (sh-wh) / 2
    #居中显示
    win.geometry("%dx%d+%d+%d" %(ww,wh,x,y))
    #不可缩放
    win.resizable(0, 0)

    label=tkinter.Label(win,text='原始文件')  #图片
    label.pack()
    # height表示的是显示的行数
    text_old = tkinter.Text(win, width=75, height=15)
    text_old.pack(pady=5)

    label2=tkinter.Label(win,text='去重后文件')  #图片
    label2.pack()
    # height表示的是显示的行数
    text_new = tkinter.Text(win, width=75, height=15)
    text_new.pack(pady=5)

    btn1 = tkinter.Button(win, text='选择txt文件',width=15,command =lambda:thread_it(chiose_txt_file))
    btn1.pack(pady=6)

    btn = tkinter.Button(win, text='去除重复行',width=15,command = lambda:thread_it(btnCallBack))
    
    btn2 = tkinter.Button(win, text='打开文件所在文件夹',width=15,command = lambda:thread_it(open_dir))
    
    win.mainloop()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能视界探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值