Build a Bulk File Rename Tool With Python and PyQt

Multiple file renaming can be a laborious and time-consuming process. However, we can create a Bulk File Rename Tool that automates and simplifies the process with the aid of Python and PyQt.

This article will explore the step-by-step process of creating a Bulk File Rename Tool using Python and PyQt. By leveraging the power of Python's file-handling capabilities and the user-friendly PyQt framework, we can develop a tool that allows us to rename multiple files quickly and efficiently.

Prerequisites

Before we dive into building the tool, it is recommended to have a basic understanding of Python programming and PyQt. Familiarity with file-handling operations in Python would also be beneficial.

Setting Up the Environment

Make sure Python and PyQt are installed on your computer first. Run the following command to install PyQt using a package manager like pip −

pip install pyqt5

Additionally, we will be using the os module, which is included in the Python standard library.

Creating the User Interface

The first step is to design the user interface for our bulk file renaming tool. PyQt provides a wide variety of widgets to create interactive graphical applications. Let's start by importing the required modules −

import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog

class FileRenameTool(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Bulk File Rename Tool")
        self.resize(400, 200)
        
        # Create central widget and layout
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        
        self.layout = QVBoxLayout()
        
        # Add UI components
        self.label = QLabel("Enter new file name:")
        self.layout.addWidget(self.label)
        
        self.line_edit = QLineEdit()
        self.layout.addWidget(self.line_edit)
        
        self.button = QPushButton("Rename Files")
        self.button.clicked.connect(self.rename_files)
        self.layout.addWidget(self.button)
        
        self.central_widget.setLayout(self.layout)
        
    def rename_files(self):
        # Implementation will be added in next section
        pass

# Test the UI (comment out when adding full functionality)
if __name__ == "__main__":
    app = QApplication([])
    window = FileRenameTool()
    window.show()
    app.exec_()

The FileRenameTool class inherits from QMainWindow and represents the main window of our application. It includes a label, a line edit widget for user input, and a button to initiate the renaming process.

Implementing the File Renaming Logic

Now let's implement the core functionality for bulk file renaming. Replace the empty rename_files method with the following implementation −

import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog, QMessageBox

class FileRenameTool(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Bulk File Rename Tool")
        self.resize(400, 200)
        
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        
        self.layout = QVBoxLayout()
        
        self.label = QLabel("Enter new file name:")
        self.layout.addWidget(self.label)
        
        self.line_edit = QLineEdit()
        self.layout.addWidget(self.line_edit)
        
        self.button = QPushButton("Rename Files")
        self.button.clicked.connect(self.rename_files)
        self.layout.addWidget(self.button)
        
        self.central_widget.setLayout(self.layout)
        
    def rename_files(self):
        # Get the new name from input field
        new_name = self.line_edit.text().strip()
        
        if not new_name:
            QMessageBox.warning(self, "Warning", "Please enter a new file name.")
            return
        
        # Open file dialog to select directory
        file_dialog = QFileDialog()
        file_dialog.setFileMode(QFileDialog.DirectoryOnly)
        
        if file_dialog.exec_():
            directory = file_dialog.selectedFiles()[0]
            files_renamed = 0
            
            try:
                for i, filename in enumerate(os.listdir(directory)):
                    file_path = os.path.join(directory, filename)
                    
                    if os.path.isfile(file_path):
                        # Get file extension
                        file_extension = os.path.splitext(filename)[1]
                        
                        # Create new filename with counter to avoid conflicts
                        if i == 0:
                            new_file_name = new_name + file_extension
                        else:
                            new_file_name = f"{new_name}_{i}{file_extension}"
                        
                        new_file_path = os.path.join(directory, new_file_name)
                        
                        # Rename the file
                        os.rename(file_path, new_file_path)
                        files_renamed += 1
                
                QMessageBox.information(self, "Success", f"Successfully renamed {files_renamed} files.")
                
            except Exception as e:
                QMessageBox.critical(self, "Error", f"An error occurred: {str(e)}")

if __name__ == "__main__":
    app = QApplication([])
    window = FileRenameTool()
    window.show()
    app.exec_()

The rename_files method opens a file dialog to select a directory containing files to rename. It iterates through each file in the directory, creates a new filename by combining the entered name with a counter (to avoid conflicts), and renames each file using os.rename().

How It Works

Here's the step-by-step process of how our bulk file rename tool operates −

  1. User Input: The user enters a new base name for the files
  2. Directory Selection: A file dialog opens to select the target directory
  3. File Processing: The tool iterates through all files in the selected directory
  4. Name Generation: Each file gets a new name with a counter to prevent conflicts
  5. File Renaming: The os.rename() function updates each filename
  6. Feedback: A message box shows the number of files successfully renamed

Enhanced Features

To make the tool more robust and user-friendly, consider adding these features −

File Filtering Options

Add the capability to filter files based on specific criteria like file extension, file size, or modification date. This gives users more control over which files get renamed.

Preview Functionality

Implement a preview feature that shows users what the new filenames will look like before actually renaming them. This prevents accidental changes and allows verification.

Batch Renaming Patterns

Support advanced patterns like date/time stamps, sequential numbering with custom formats, or text replacement operations for more flexible renaming options.

Undo Functionality

Store the original filenames to allow users to revert changes if needed. This provides an extra safety net during the renaming process.

Conclusion

We've successfully built a functional bulk file rename tool using Python and PyQt. The tool provides an intuitive interface for selecting directories and renaming multiple files with a consistent naming pattern. With additional features like preview functionality and file filtering, this tool can become even more powerful for efficient file management tasks.

Updated on: 2026-03-27T08:53:20+05:30

421 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements