我们在对多个文件进行编号时,逐个修改文件名称会很繁琐,所以针对这个问题,带领大家使用PyQt5制作一个批量修改文件名称的小程序,并让大家充分学习!
将我们要批量改名的文件放在一个文件夹中,改名时我们选择对应的文件夹,在下面输入新的文件名字,点击开始改名,即可修改成功(成功后将弹窗提示修改成功,并告知修改了多少个文件,和文件名)
注意:只修改文件的前缀,后缀不会修改!不同类型的文件可以放在一起改名!
新建窗口控件,设置Layout布局在窗口里
class BatchRenameApp(QWidget):
def __init__(self):
super().__init__()
# 设置主窗口标题和大小
self.setWindowTitle('文件批量改名工具')
self.setGeometry(100, 100, 400, 200)
# 创建垂直布局
self.layout = QVBoxLayout()
# 创建选择文件夹的标签
self.label_folder = QLabel('选择文件夹:')
self.layout.addWidget(self.label_folder)
# 创建用于显示文件夹路径的文本框
self.folder_path = QLineEdit()
self.layout.addWidget(self.folder_path)
# 创建浏览按钮,点击后弹出文件夹选择对话框
self.browse_button = QPushButton('浏览')
self.browse_button.clicked.connect(self.browse_folder)
self.layout.addWidget(self.browse_button)
# 创建新文件名前缀的标签
self.label_prefix = QLabel('新文件名前缀:')
self.layout.addWidget(self.label_prefix)
# 创建用于输入新文件名前缀的文本框
self.prefix_input = QLineEdit()
self.layout.addWidget(self.prefix_input)
# 创建开始改名按钮,点击后调用 batch_rename 方法
self.rename_button = QPushButton('开始改名')
self.rename_button.clicked.connect(self.batch_rename)
self.layout.addWidget(self.rename_button)
# 设置窗口布局
self.setLayout(self.layout)
browse_folder
方法用于处理点击浏览按钮时的操作
def browse_folder(self):
# 打开文件夹选择对话框,获取选择的文件夹路径
folder_path = QFileDialog.getExistingDirectory(self, '选择文件夹')
# 如果用户选择了文件夹,将文件夹路径显示在文本框中
if folder_path:
self.folder_path.setText(folder_path)
batch_rename方法执行修改文件名
def batch_rename(self):
# 获取文件夹路径和新文件名前缀
folder_path = self.folder_path.text()
prefix = self.prefix_input.text()
# 检查文件夹路径和前缀是否为空
if not folder_path or not prefix:
return
try:
# 获取文件夹中所有文件的列表
file_list = os.listdir(folder_path)
# 遍历文件列表,批量改名
for count, filename in enumerate(file_list):
file_extension = os.path.splitext(filename)[1]
new_filename = f"{prefix}_{count + 1}{file_extension}"
# 检查新文件名是否已存在,如果存在则添加序号
while os.path.exists(os.path.join(folder_path, new_filename)):
count += 1
new_filename = f"{prefix}_{count + 1}{file_extension}"
old_filepath = os.path.join(folder_path, filename)
new_filepath = os.path.join(folder_path, new_filename)
os.rename(old_filepath, new_filepath)
# 弹出成功消息框
QMessageBox.information(self, '成功', f'批量改名完成!\n共修改:{count}文件...\n文件名为:{prefix}')
except Exception as e:
# 弹出错误消息框
QMessageBox.Critical(self, '错误', f'批量改名错误!\n错误信息:{e}')
-
folder_path = self.folder_path.text()
和prefix = self.prefix_input.text()
:这两行代码分别获取用户在文件夹路径和新文件名前缀输入框中输入的文本。 -
if not folder_path or not prefix:
:这个条件检查文件夹路径和前缀是否为空,如果有任一为空,则返回,不执行批量改名操作。 -
file_list = os.listdir(folder_path)
:使用os.listdir
获取文件夹中所有文件的列表。 -
for count, filename in enumerate(file_list):
:使用enumerate
遍历文件列表,其中count
是序号,filename
是文件名。 -
file_extension = os.path.splitext(filename)[1]
:使用os.path.splitext
获取文件扩展名。 -
new_filename = f"{prefix}_{count + 1}{file_extension}"
:构造新的文件名,包含前缀、序号和原始扩展名。 -
while os.path.exists(os.path.join(folder_path, new_filename)):
:检查新文件名是否已存在,如果存在则在文件名后面添加序号,确保新文件名唯一。 -
old_filepath = os.path.join(folder_path, filename)
和new_filepath = os.path.join(folder_path, new_filename)
:构造旧文件路径和新文件路径。 -
os.rename(old_filepath, new_filepath)
:使用os.rename
对文件进行重命名。 -
弹出成功或错误消息框:根据操作的成功与否,使用
QMessageBox.information
或QMessageBox.Critical
弹出相应的消息框。 -
if __name__ == "__main__": # 创建一个应用程序对象 app = QApplication([]) # 创建 BatchRenameApp 类的实例,即主窗口 window = BatchRenameApp() # 显示主窗口 window.show() # 启动应用程序的主事件循环 app.exec_()
完整代码(需要的朋友直接cv即可)
-
import os from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog, QMessageBox class BatchRenameApp(QWidget): def __init__(self): super().__init__() self.setWindowTitle('文件批量改名工具') self.setGeometry(100, 100, 400, 200) self.layout = QVBoxLayout() self.label_folder = QLabel('选择文件夹:') self.layout.addWidget(self.label_folder) self.folder_path = QLineEdit() self.layout.addWidget(self.folder_path) self.browse_button = QPushButton('浏览') self.browse_button.clicked.connect(self.browse_folder) self.layout.addWidget(self.browse_button) self.label_prefix = QLabel('新文件名前缀:') self.layout.addWidget(self.label_prefix) self.prefix_input = QLineEdit() self.layout.addWidget(self.prefix_input) self.rename_button = QPushButton('开始改名') self.rename_button.clicked.connect(self.batch_rename) self.layout.addWidget(self.rename_button) self.setLayout(self.layout) def browse_folder(self): folder_path = QFileDialog.getExistingDirectory(self, '选择文件夹') if folder_path: self.folder_path.setText(folder_path) def batch_rename(self): folder_path = self.folder_path.text() prefix = self.prefix_input.text() if not folder_path or not prefix: return try: # 获取文件夹中所有文件的列表 file_list = os.listdir(folder_path) # 遍历文件列表,批量改名 for count, filename in enumerate(file_list): file_extension = os.path.splitext(filename)[1] new_filename = f"{prefix}_{count + 1}{file_extension}" # 检查新文件名是否已存在,如果存在则添加序号 while os.path.exists(os.path.join(folder_path, new_filename)): count += 1 new_filename = f"{prefix}_{count + 1}{file_extension}" old_filepath = os.path.join(folder_path, filename) new_filepath = os.path.join(folder_path, new_filename) os.rename(old_filepath, new_filepath) QMessageBox.information(self, '成功', f'批量改名完成!\n共修改:{count}文件...\n文件名为:{prefix}') except Exception as e: QMessageBox.Critical(self, '错误', f'批量改名错误!\n错误信息:{e}') if __name__ == "__main__": app = QApplication([]) window = BatchRenameApp() window.show() app.exec_()
本期的PyQt的程序案例就分享到这了!后期会更新更多PyQt的程序!感谢支持!有什么想看的程序在评论区留言!