前几天在某歉职网站上看到个需求,但是想做却要先花费不少进行投标,不中还不退还,吃相好难看,现将源码发在这里,供有需求的免费使用。(支持任何文件的重命名)
PS.本人接兼职开发,有需要的可联系我
主代码:file_rename.py其中help_info.py为img2py生成的代码,自行替换即可
import os
import openpyxl
import wx
import wx.adv
import help_info
from openpyxl.utils import column_index_from_string
from mainform import Root
def run_rename():
file_path = frm.m_text_file.GetValue()
print(file_path)
if file_path:
wb = openpyxl.load_workbook(file_path, data_only=True)
ws = wb.active
# 定义需要用到的变量的默认值
old_name_column = frm.m_text_old_column.GetValue()
new_name_column = frm.m_text_new_column.GetValue()
path = frm.m_text_path.GetValue()
start_row = 1
end_row = ws.max_row + 1
rep = True
if not old_name_column:
old_name_column = "A"
pass
if not new_name_column:
new_name_column = "B"
pass
print(old_name_column, new_name_column, path)
for row in range(start_row, end_row):
old_name = ws.cell(row=row, column=column_index_from_string(old_name_column)).value
new_name = ws.cell(row=row, column=column_index_from_string(new_name_column)).value
if old_name and new_name:
if not os.path.exists(old_name):
old_name = path + "/" + old_name
print(old_name)
pass
if os.path.exists(old_name):
# 获取文件名和扩展名
newfile_name, file_ext = os.path.splitext(new_name)
print(newfile_name)
print(file_ext)
# 替换扩展名
if not file_ext or rep:
file_name, file_ext = os.path.splitext(old_name)
print(file_name)
print(file_ext)
pass
# 构建新文件名(包括路径和扩展名)
new_file_name = os.path.join(os.path.dirname(old_name), newfile_name + file_ext)
print(new_file_name)
# 重命名文件
os.rename(old_name, new_file_name)
pass
pass
pass
pass
pass
def show_help(self):
info = wx.adv.AboutDialogInfo()
info.SetIcon(wx.Icon(getattr(help_info, "help").GetBitmap()))
info.SetName("批量重命名工具")
info.SetVersion("20231005")
info.SetCopyright("(c) 2023 by sunswy")
info.SetDescription("如使用中有什么不明白\n或程序有bug需要改进,\n请扫码添加微信详细说明")
wx.adv.AboutBox(info)
pass
class NewWindows(Root):
def start_run(self, event):
super().start_run(event)
run_rename()
pass
def load_file(self, event):
super().load_file(event)
filename = wx.FileSelector("选择一个含命名规则的excel文件",
wildcard="Excel 文件(*.xlsx)|*.xlsx|所有文件 (*.*)|*.*")
if filename.strip():
self.m_text_file.SetLabel(filename)
pass
pass
def select_path(self, event):
super().select_path(event)
pathname = wx.DirSelector("选择一个路径")
if pathname.strip():
self.m_text_path.SetLabel(pathname)
pass
pass
def get_help(self, event):
super().get_help(event)
show_help(self)
if __name__ == '__main__':
app = wx.App()
frm = NewWindows(None)
frm.Show()
app.MainLoop()
UI代码mainframe.py
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
###########################################################################
## Class Root
###########################################################################
class Root(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"批量重命名工具 by sunswy 20231005",
pos=wx.DefaultPosition, size=wx.Size(500, 200),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
gSizer_layot = wx.GridSizer(0, 2, 0, 0)
self.m_text_file = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
self.m_text_file.SetToolTip(u"包含重命名规则的excel文件")
gSizer_layot.Add(self.m_text_file, 0, wx.ALL | wx.EXPAND, 5)
self.m_button_file = wx.Button(self, wx.ID_ANY, u"选择文件", wx.DefaultPosition, wx.DefaultSize, 0)
gSizer_layot.Add(self.m_button_file, 0, wx.ALL | wx.EXPAND, 5)
self.m_text_old_column = wx.TextCtrl(self, wx.ID_ANY, u"A", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_text_old_column.SetToolTip(u"旧文件名所在列 默认列A")
gSizer_layot.Add(self.m_text_old_column, 0, wx.ALL | wx.EXPAND, 5)
self.m_text_new_column = wx.TextCtrl(self, wx.ID_ANY, u"B", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_text_new_column.SetToolTip(u"新文件名所在列 默认列B")
gSizer_layot.Add(self.m_text_new_column, 0, wx.ALL | wx.EXPAND, 5)
self.m_text_path = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
self.m_text_path.SetToolTip(u"如旧文件名包含路径,则此处留空")
gSizer_layot.Add(self.m_text_path, 0, wx.ALL | wx.EXPAND, 5)
self.m_button_path = wx.Button(self, wx.ID_ANY, u"选择路径", wx.DefaultPosition, wx.DefaultSize, 0)
gSizer_layot.Add(self.m_button_path, 0, wx.ALL | wx.EXPAND, 5)
self.m_button_run = wx.Button(self, wx.ID_ANY, u"运行", wx.DefaultPosition, wx.DefaultSize, 0)
gSizer_layot.Add(self.m_button_run, 0, wx.ALL | wx.EXPAND, 5)
self.m_button_help = wx.Button(self, wx.ID_ANY, u"帮助", wx.DefaultPosition, wx.DefaultSize, 0)
gSizer_layot.Add(self.m_button_help, 0, wx.ALL | wx.EXPAND, 5)
self.SetSizer(gSizer_layot)
self.Layout()
self.Centre(wx.BOTH)
# Connect Events
self.m_button_file.Bind(wx.EVT_BUTTON, self.load_file)
self.m_button_path.Bind(wx.EVT_BUTTON, self.select_path)
self.m_button_run.Bind(wx.EVT_BUTTON, self.start_run)
self.m_button_help.Bind(wx.EVT_BUTTON, self.get_help)
def __del__(self):
pass
# Virtual event handlers, override them in your derived class
def load_file(self, event):
event.Skip()
def select_path(self, event):
event.Skip()
def start_run(self, event):
event.Skip()
def get_help(self, event):
event.Skip()