Python實現(xiàn)批量獲取文件夾內(nèi)文件名并重命名
更新時間:2025年02月09日 09:10:31 作者:一晌小貪歡
這篇文章主要為大家詳細介紹了Python如何批量獲取文件夾內(nèi)文件名及重命名文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
1、背景介紹
有時候我們經(jīng)常需要將批量的文件進行重命名,比如:
- ① 批量在文件名【前面】加上 自定義字符
- ② 批量在文件名【后面】加上 自定義字符
- ③ 批量在【替換】文件名中的字符
- ④ 批量去除 空格
- ⑤ 結(jié)果可以選擇復(fù)制文件 或者 移動 文件
2、庫的安裝
庫 | 用途 | 安裝 |
---|---|---|
PyQt5 | 界面設(shè)計 | pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
shutil | 文件移動 | 內(nèi)置庫無需安裝 |
os | 文件移動 | 內(nèi)置庫無需安裝 |
3、核心代碼
復(fù)制 或 移動
shutil.move(old_file, new_file) # 移動文件 shutil.copy2(old_file, new_file) # 復(fù)制文件
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.") # 檢查目標文件夾是否存在,不存在則創(chuàng)建 if not os.path.exists(new_folder_path): os.makedirs(new_folder_path) index = 0 # 遍歷文件夾內(nèi)所有文件 for filename in os.listdir(folder_path): # 構(gòu)造完整文件路徑 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 # 生成基礎(chǔ)的新文件名 new_name = f"{index}{new_name_base}{extension}" # 在文件名最前面添加索引 # 重新組合文件名和擴展名 new_name = new_name + extension new_file = os.path.join(new_folder_path, new_name) # 根據(jù)用戶選擇執(zhí)行復(fù)制或移動操作 if move_files: shutil.move(old_file, new_file) # 移動文件 print(f"Moved '{filename}' to '{new_name}'") else: shutil.copy2(old_file, new_file) # 復(fù)制文件 print(f"Copied '{filename}' to '{new_name}'") class FileCopyApp(QWidget): def __init__(self): super().__init__() self.setWindowTitle("文件重命名—復(fù)制版") 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("重復(fù)名稱添加索引") self.remove_spaces_check_box = QCheckBox("去除文件名中的空格") # Copy or Move Radio Buttons self.copy_radio = QRadioButton("復(fù)制") self.move_radio = QRadioButton("移動") self.copy_radio.setChecked(True) # 默認選擇復(fù)制 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() # 判斷用戶選擇的是復(fù)制還是移動 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、效果圖
到此這篇關(guān)于Python實現(xiàn)批量獲取文件夾內(nèi)文件名并重命名的文章就介紹到這了,更多相關(guān)Python文件重命名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)基于SVM手寫數(shù)字識別功能
這篇文章主要為大家詳細介紹了python實現(xiàn)基于SVM手寫數(shù)字識別功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01Python學(xué)習(xí)之12個常用基礎(chǔ)語法詳解
這篇文章主要為大家介紹了12個Python小案例,包含了日常開發(fā)中非常實用的語法,快來跟隨小編一起學(xué)習(xí)一下,看看自己都會多少個呢2022-02-02python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家徹底理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09