1、背景介绍
有时候我们经常需要将批量的文件进行重命名,比如:
- ① 批量在文件名【前面】加上 自定义字符
- ② 批量在文件名【后面】加上 自定义字符
- ③ 批量在【替换】文件名中的字符
- ④ 批量去除 空格
- ⑤ 结果可以选择复制文件 或者 移动 文件
2、库的安装
库 | 用途 | 安装 |
---|---|---|
PyQt5 | 界面设计 | pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
shutil | 文件移动 | 内置库无需安装 |
os | 文件移动 | 内置库无需安装 |
3、核心代码
复制 或 移动
1 2 | shutil.move(old_file, new_file) # 移动文件 shutil.copy2(old_file, new_file) # 复制文件 |
4、完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | # -*- 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俱乐部!