欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)字識別功能

    這篇文章主要為大家詳細介紹了python實現(xiàn)基于SVM手寫數(shù)字識別功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python基于template實現(xiàn)字符串替換

    Python基于template實現(xiàn)字符串替換

    這篇文章主要介紹了Python基于template實現(xiàn)字符串替換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Django ORM框架的定時任務(wù)如何使用詳解

    Django ORM框架的定時任務(wù)如何使用詳解

    這篇文章主要給大家介紹了關(guān)于Django ORM框架的定時任務(wù)如何使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Python學(xué)習(xí)之12個常用基礎(chǔ)語法詳解

    Python學(xué)習(xí)之12個常用基礎(chǔ)語法詳解

    這篇文章主要為大家介紹了12個Python小案例,包含了日常開發(fā)中非常實用的語法,快來跟隨小編一起學(xué)習(xí)一下,看看自己都會多少個呢
    2022-02-02
  • 詳解Python中元組的三個不常用特性

    詳解Python中元組的三個不常用特性

    元組是Python中一種重要的內(nèi)置數(shù)據(jù)類型。與列表一樣,我們經(jīng)常使用元組將多個對象保存為相應(yīng)的數(shù)據(jù)容器。本文為大家總結(jié)了元組的三個不常用特性,感興趣的小伙伴可以了解一下
    2022-07-07
  • Node.js 和 Python之間該選擇哪個?

    Node.js 和 Python之間該選擇哪個?

    這篇文章主要介紹了Node.js 和 Python之間的優(yōu)劣,并得出結(jié)論,希望能為你在項目選擇哪種技術(shù)時提供一些幫助。感興趣的朋友可以了解下
    2020-08-08
  • python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解

    python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解

    這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之列表和元組的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家徹底理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Python3.7下安裝pyqt5的方法步驟(圖文)

    Python3.7下安裝pyqt5的方法步驟(圖文)

    這篇文章主要介紹了Python3.7下安裝pyqt5的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python刪除列表中重復(fù)元素的七種方法舉例

    Python刪除列表中重復(fù)元素的七種方法舉例

    我們在面試中很可能遇到給定一個含有重復(fù)元素的列表,刪除其中重復(fù)的元素,下面這篇文章主要給大家介紹了關(guān)于Python刪除列表中重復(fù)元素的七種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Python繪制七段數(shù)碼管字母

    Python繪制七段數(shù)碼管字母

    在現(xiàn)代電子顯示技術(shù)中,七段數(shù)碼管是一種廣泛應(yīng)用的顯示器件,常用于顯示數(shù)字、字母和一些特殊符號,本文將詳細介紹如何使用Python繪制七段數(shù)碼管顯示字母的過程,需要的可以參考下
    2024-12-12

最新評論