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关注一下哦~

你可能感兴趣的:(Python、Tkinter一键获取文件名生成txt,告别手动复制)