Python、Tkinter一键获取文件名生成txt,告别手动复制

大家好,我是200,一个喜欢生活的程序员~

引言-应用背景

背景:“工作中运营人员需要手动操作文件夹获取文件名称保存成txt或其他格式用于数据分析或其他用途”

问题:“由于手动提取文件名称(指定类型的文件)过于繁琐,所以需要采用自动的形式来完成这一操作”

实现方式:采用pythonGUI图形界面化

GUI库:tkinter

本文只实现了现存问题,后续会对代码和功能进行补充,连载文哦~

有需求可以提~

前期准备

安装python3

Mac版本

mac版本默认2.7

brew install python3

Windows版本

1.在官网下载对应的版本

https://www.python.org/downloads/windows/

64位下载Windows x86-64 executable installer 版本

32位下载Windows x86 executable installer 版本

2.双击安装包正常安装即可。ps:记得勾选Add PythonX.X to PATH --可以自动添加到环境变量里哦!

⚠️ 踩坑时间到!!!要是用tkinter一定要安装python3,不要问为什么!

脚本码上

#!/usr/local/bin/python3

import tkinter as tk
import tkinter.filedialog as tk_fld
import tkinter.messagebox as messagebox
import os

#文件格式选择类型(根据需求可自行新增)
voice_types = [
    ("pcm", 0),
    ("wav", 1)
]
text_types = [
    ("text", 0),
    ("txt", 1)
]
doc_types = [
    ("doc", 0),
    ("docx", 1)
]

xls_types = [
    ("xls", 0),
    ("xlsx", 1)
]

image_types = [
    ("jpg", 0),
    ("png", 1)
]

#设置目录
def set_directory(arg):
    set_path = tk_fld.askdirectory()
    arg.set(set_path)

#消息提示
def msg_box(arg):
    messagebox.showinfo("提示窗口", arg)

#获取文件
def get_file(choose, out, arg_type):
    if arg_type.get() == '0':
        msg_box("类型不允许为空!")
    else:
        file_name_arr = get_folder_file_name(choose, arg_type.get())
        out_file(out, file_name_arr)
        msg_box("写入成功")
        var_choose.set('')
        var_out.set('')

# 获取文件夹内指定文件类型名称
def get_folder_file_name(choose, arg):
    list_arr = []
    for root, dirs, files in os.walk(choose.get()):
        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名list
        # files 表示该文件夹下的文件list
        for f in files:
            if f.endswith(arg):
                file_name = os.path.join(root, f)
                new_file_name = file_name.replace(choose.get(), '').replace('/', '') + ":" + "\n"
                list_arr.append(new_file_name)

    return list_arr


# 生成文本
def out_file(out, arr):
    full_path = "result" + '.txt'  # 也可以创建一个.doc的word文档
    file = open(out.get() + '/' + full_path, 'w')  # w 的含义为可进行读写
    for value in arr:
        file.write(value)

    file.close()


# 创建窗口
window = tk.Tk()

# 设置窗口标题
window.title('文件处理小工具')

# 设置窗口大小,使用小写x
window.geometry("1000x800")

# 创建子容器
container = tk.LabelFrame(window, text="获取文件夹内全部文件名", font=24)
container.grid(row=0, column=0, padx=5, pady=5)

label_choose = tk.Label(container, text="要选择的文件夹", font=30, width=15)

var_choose = tk.StringVar()

# 文本属性textvariable  可变文本,与StringVar等配合着用
label_out_path = tk.Entry(container, textvariable=var_choose, font=(30), width=60)

# 设置输入目录 command: 指定按钮消息的回调函数;
btn_label_path = tk.Button(container, text="设置输入目录", font=(30),
                           command=lambda: set_directory(var_choose))

# 格式排版
label_choose.grid(row=0, column=0, padx=5, pady=5)
label_out_path.grid(row=0, column=1, padx=5, pady=5)
btn_label_path.grid(row=0, column=2, padx=5, pady=5)

label_out = tk.Label(container, text="要输出的文件夹", font=30, width=15)

var_out = tk.StringVar()
# 文本属性textvariable  可变文本,与StringVar等配合着用
label_out_path = tk.Entry(container, textvariable=var_out, font=(30), width=60)

# 设置输入目录 command: 指定按钮消息的回调函数;
btn_label_out_path = tk.Button(container, text="设置输入目录", font=(30),
                               command=lambda: set_directory(var_out))

# 格式排版
label_out.grid(row=1, column=0, padx=5, pady=5)
label_out_path.grid(row=1, column=1, padx=5, pady=5)
btn_label_out_path.grid(row=1, column=2, padx=5, pady=5)

label_radio = tk.Label(container, text="请选择要获取的文件类型", font=30, width=18)

label_radio_type = tk.StringVar()

for file_type, num in voice_types:
    b = tk.Radiobutton(container, text=file_type, variable=label_radio_type, value=file_type)
    b.grid(row=3, column=num, sticky=tk.W)

for doc_type, num1 in doc_types:
    b = tk.Radiobutton(container, text=doc_type, variable=label_radio_type, value=doc_type)
    b.grid(row=4, column=num1, sticky=tk.W)

for image_type, num2 in image_types:
    b = tk.Radiobutton(container, text=image_type, variable=label_radio_type, value=image_type)
    b.grid(row=5, column=num2, sticky=tk.W)

for text_type, num3 in text_types:
    b = tk.Radiobutton(container, text=text_type, variable=label_radio_type, value=text_type)
    b.grid(row=6, column=num3, sticky=tk.W)

for xls_type, num4 in xls_types:
    b = tk.Radiobutton(container, text=xls_type, variable=label_radio_type, value=xls_type)
    b.grid(row=7, column=num4, sticky=tk.W)

# 格式排版
label_radio.grid(row=2, column=0, sticky=tk.W)

label_radio_type.set(0)

btn_get_file_name = tk.Button(container, text='获取文件名称生成指定文件', font=(
    30), command=lambda: get_file(var_choose, var_out, label_radio_type))
btn_get_file_name.grid(row=8, column=2, padx=5, pady=5)

# 进入消息循环, window不断刷新
window.mainloop()

if __name__ == "__main__":
    print("run " + __file__)

展示结果

image-20210825230349627
image-20210825230913527
image-20210825230950264

最终结果

image-20210825231016706

彩蛋及预告

本文为连载篇,所以后续会继续优化和新增需要,下期会根据新的需求新增功能,并且下期附上如何打包python应用程序的方法,让大家用起来更方便~

完整代码及后续更新地址附上:https://github.com/printf200/fileScriptTool-demo

😄欢迎大家star,笔芯❤️~,我们下期再见喽~
可以搜索公众号printf200关注一下哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容