1、背景介绍
有时候我们经常需要将批量的文件进行重命名,比如:
- ① 批量在文件名【前面】加上 自定义字符
- ② 批量在文件名【后面】加上 自定义字符
- ③ 批量在【替换】文件名中的字符
- ④ 批量去除 空格
- ⑤ 结果可以选择复制文件 或者 移动 文件
2、库的安装
| 库 | 用途 | 安装 |
|---|---|---|
| PyQt5 | 界面设计 | pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
| shutil | 文件移动 | 内置库无需安装 |
| os | 文件移动 | 内置库无需安装 |
3、核心代码
复制 或 移动
shutil.move(old_file, new_file) # 移动文件 shutil.copy2(old_file, new_file) # 复制文件
4、完整代码
# -*- coding: UTF-8 -*-
'''
@Project :测试
@File :文件重命名.py
@IDE :PyCharm
@Author :一晌小贪欢(278865463@qq.com)
@Date :2025/2/7 下午8:02
'''
import os
import shutil
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog, QCheckBox, QFormLayout, QSpinBox, QGroupBox, QDialogButtonBox, QRadioButton, QButtonGroup
def copy_or_move_files(folder_path, new_folder_path, prefix="", suffix="", replace_chars=None, add_index=False, remove_spaces=False, move_files=False):
# 检查源文件夹是否存在
if not os.path.exists(folder_path):
raise FileNotFoundError(f"Folder '{folder_path}' does not exist.")
# 检查目标文件夹是否存在,不存在则创建
if not os.path.exists(new_folder_path):
os.makedirs(new_folder_path)
index = 0
# 遍历文件夹内所有文件
for filename in os.listdir(folder_path):
# 构造完整文件路径
old_file = os.path.join(folder_path, filename)
# 判断是否为文件(排除文件夹)
if os.path.isfile(old_file):
# 分割文件名和扩展名
name_only, extension = os.path.splitext(filename)
# 生成新文件名
new_name = name_only
if prefix:
new_name = prefix + new_name
if suffix:
new_name = new_name + suffix
if replace_chars:
old_char, new_char = replace_chars
new_name = new_name.replace(old_char, new_char)
if remove_spaces:
new_name = new_name.replace(" ", "") # 去除空格
if add_index:
index += 1
name_only, extension = os.path.splitext(filename) # 分离原始文件名和扩展名
new_name_base = prefix + name_only + suffix # 生成基础的新文件名
new_name = f"{index}{new_name_base}{extension}" # 在文件名最前面添加索引
# 重新组合文件名和扩展名
new_name = new_name + extension
new_file = os.path.join(new_folder_path, new_name)
# 根据用户选择执行复制或移动操作
if move_files:
shutil.move(old_file, new_file) # 移动文件
print(f"Moved '{filename}' to '{new_name}'")
else:
shutil.copy2(old_file, new_file) # 复制文件
print(f"Copied '{filename}' to '{new_name}'")
class FileCopyApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("文件重命名—复制版")
self.setGeometry(900, 500, 600, 300)
# Initialize UI components
self.init_ui()
def init_ui(self):
# Create layout
layout = QVBoxLayout()
# Source Folder
self.folder_label = QLabel("源文件:")
self.folder_line_edit = QLineEdit()
self.browse_button = QPushButton("浏览")
self.browse_button.clicked.connect(self.browse_folder)
# Destination Folder
self.new_folder_label = QLabel("保存文件夹:")
self.new_folder_line_edit = QLineEdit()
self.new_folder_button = QPushButton("浏览")
self.new_folder_button.clicked.connect(self.browse_new_folder)
# Prefix, Suffix, Char Replacement
self.prefix_label = QLabel("头部添加:")
self.prefix_line_edit = QLineEdit()
self.suffix_label = QLabel("尾部添加:")
self.suffix_line_edit = QLineEdit()
self.old_char_label = QLabel("原字符:")
self.old_char_line_edit = QLineEdit()
self.new_char_label = QLabel("替换字符:")
self.new_char_line_edit = QLineEdit()
# Index and Space Removal
self.add_index_check_box = QCheckBox("重复名称添加索引")
self.remove_spaces_check_box = QCheckBox("去除文件名中的空格")
# Copy or Move Radio Buttons
self.copy_radio = QRadioButton("复制")
self.move_radio = QRadioButton("移动")
self.copy_radio.setChecked(True) # 默认选择复制
self.action_group = QButtonGroup()
self.action_group.addButton(self.copy_radio)
self.action_group.addButton(self.move_radio)
# Start Button
self.start_button = QPushButton("开始")
self.start_button.clicked.connect(self.start_copy_or_move)
# Arrange components
folder_layout = QHBoxLayout()
folder_layout.addWidget(self.folder_label)
folder_layout.addWidget(self.folder_line_edit)
folder_layout.addWidget(self.browse_button)
new_folder_layout = QHBoxLayout()
new_folder_layout.addWidget(self.new_folder_label)
new_folder_layout.addWidget(self.new_folder_line_edit)
new_folder_layout.addWidget(self.new_folder_button)
replace_layout = QFormLayout()
replace_layout.addRow(self.prefix_label, self.prefix_line_edit)
replace_layout.addRow(self.suffix_label, self.suffix_line_edit)
replace_layout.addRow(self.old_char_label, self.old_char_line_edit)
replace_layout.addRow(self.new_char_label, self.new_char_line_edit)
options_layout = QVBoxLayout()
options_layout.addWidget(self.add_index_check_box)
options_layout.addWidget(self.remove_spaces_check_box)
# Copy or Move Layout
action_layout = QHBoxLayout()
action_layout.addWidget(self.copy_radio)
action_layout.addWidget(self.move_radio)
# Layout adjustments
layout.addLayout(folder_layout)
layout.addLayout(new_folder_layout)
layout.addLayout(replace_layout)
layout.addLayout(options_layout)
layout.addLayout(action_layout)
layout.addWidget(self.start_button)
# Set main layout
self.setLayout(layout)
def browse_folder(self):
folder_path = QFileDialog.getExistingDirectory(self, "选择源文件夹")
if folder_path:
self.folder_line_edit.setText(folder_path)
def browse_new_folder(self):
new_folder_path = QFileDialog.getExistingDirectory(self, "选择保存文件夹")
if new_folder_path:
self.new_folder_line_edit.setText(new_folder_path)
def start_copy_or_move(self):
folder_path = self.folder_line_edit.text()
new_folder_path = self.new_folder_line_edit.text()
prefix = self.prefix_line_edit.text()
suffix = self.suffix_line_edit.text()
replace_chars = (
self.old_char_line_edit.text(), self.new_char_line_edit.text()) if self.old_char_line_edit.text() and self.new_char_line_edit.text() else None
add_index = self.add_index_check_box.isChecked()
remove_spaces = self.remove_spaces_check_box.isChecked()
move_files = self.move_radio.isChecked() # 判断用户选择的是复制还是移动
copy_or_move_files(folder_path, new_folder_path, prefix, suffix, replace_chars, add_index, remove_spaces, move_files)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = FileCopyApp()
window.show()
sys.exit(app.exec_())
5、效果图

到此这篇关于Python实现批量获取文件夹内文件名并重命名的文章就介绍到这了,更多相关Python文件重命名内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!
