IT俱乐部 Python Python实现批量获取文件夹内文件名并重命名

Python实现批量获取文件夹内文件名并重命名

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俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/python/14939.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部