Python實現批量獲取文件夾內文件名并重命名
更新時間:2025年02月09日 09:10:31 作者:一晌小貪歡
這篇文章主要為大家詳細介紹了Python如何批量獲取文件夾內文件名及重命名文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
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.")
# 檢查目標文件夾是否存在,不存在則創(chuàng)建
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)
# 根據用戶選擇執(zhí)行復制或移動操作
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文件重命名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

