001-PG001-Python001 一个文件批量重命名的小程序
本人工作上要经常参考国标,于是电脑上有很多国标的pdf,用文件夹分类放好的,大概300多个吧。
本来都是根据实际情况命名的,有的是GB有的是GB_T,排序的时候GB和GB_T是分开的,现在想要把这些合并排序,于是决定把所有的【_T】全部删掉,让他以编号排序,顺便练练python的os与os.path。
因为公司没有python环境,于是学了点tkinter搓了个简单的界面,再用pyinstaller打了个包。
直接扔代码吧,注释都在里面了。
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askdirectory
from os import walk, rename
from os.path import join as path_join
def select_path():
"""
选择路径函数,无返回值
选择一个路径,并将其中所有“/”替换为“\”
"""
_path = askdirectory() # 调用选择路径对话框,选择路径
path.set(_path.replace('/', '\\')) # 默认返回路径为“/”,强迫症将其中所有“/”替换为“\”
def handle_files():
"""
处理文件函数,无返回值
将处理的文件加入列表,若无需处理,显示跳过;若处理,显示绿色的处理前文件名。
"""
i = 0 # 文件序号初始化
listbox.delete(0, tk.END) # 清除listbox原数据
for _root, _dirs, _files in walk(path.get()): # 遍历文件夹下所有文件与子文件夹
for _file in _files: # 遍历所有文件
i += 1 # 文件序号+1
_full_dir = path_join(_root, _file) # 原文件名完整路径
if _file.find('_T') != -1: # 如果存在“_T”
rename(_full_dir, path_join(_root, _file.replace('_T', ''))) # 文件重命名
listbox.insert(tk.END, '[{}]处理:{}'.format(i, _full_dir)) # 处理记录
listbox.itemconfig(tk.END, fg='green') # 处理记录标成绿色
else:
listbox.insert(tk.END, '[{}]跳过:{}'.format(i, _full_dir)) # 跳过记录
listbox.yview(tk.END) # 视角移到最下方
dialog = tk.Tk()
dialog.title('国标文件去除“_T”小程序')
dialog.resizable(width=False, height=False) # 禁止调整对话框大小
path = tk.StringVar() # 定义存储路径的变量,写入和读取分别是set()和get()方法
# 定义控件
label = ttk.Label(dialog, text='需要处理的文件夹:')
entry = ttk.Entry(dialog, width=40, textvariable=path)
button_select = ttk.Button(dialog, text='选择路径', command=select_path)
button_handle = ttk.Button(dialog, text='开始处理', command=handle_files)
scrollbar_x = ttk.Scrollbar(dialog, orient=tk.HORIZONTAL)
scrollbar_y = ttk.Scrollbar(dialog)
listbox = tk.Listbox(dialog,
xscrollcommand=scrollbar_x.set,
yscrollcommand=scrollbar_y.set) # 列表绑定滚动条
scrollbar_x.config(command=listbox.xview) # 滚动条绑定列表滚动
scrollbar_y.config(command=listbox.yview)
# 打包
label.grid(row=0, column=0)
entry.grid(row=0, column=1)
button_select.grid(row=0, column=2)
button_handle.grid(row=0, column=3)
listbox.grid(row=1, column=0, columnspan=4, sticky=tk.W+tk.E)
scrollbar_x.grid(row=2, column=0, columnspan=4, sticky=tk.W+tk.E)
scrollbar_y.grid(row=1, column=4, sticky=tk.N+tk.SE)
dialog.mainloop()
(话说打包之后带到公司去会有漏文件的现象,在家里测试就没问题,不知道为啥。)