Python File Naming Ex

This plugin is designed to quickly batch rename large sequences of frames


import os
import re
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(583, 456)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(10, 270, 561, 141))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.textBrowser.setFont(font)
        self.textBrowser.setObjectName("textBrowser")
        self.label2 = QtWidgets.QLabel(self.centralwidget)
        self.label2.setGeometry(QtCore.QRect(10, 70, 181, 16))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label2.setFont(font)
        self.label2.setObjectName("label2")
        self.textEdit1 = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit1.setGeometry(QtCore.QRect(10, 90, 561, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.textEdit1.setFont(font)
        self.textEdit1.setObjectName("textEdit1")
        self.label1 = QtWidgets.QLabel(self.centralwidget)
        self.label1.setGeometry(QtCore.QRect(10, 10, 131, 16))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label1.setFont(font)
        self.label1.setObjectName("label1")
        self.textEdit2 = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit2.setGeometry(QtCore.QRect(10, 30, 561, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.textEdit2.setFont(font)
        self.textEdit2.setObjectName("textEdit2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 130, 271, 16))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(10, 150, 561, 31))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.textEdit.setFont(font)
        self.textEdit.setObjectName("textEdit")
        self.textEdit.setText("example.xxxx.exr(xxxx represent serial number format)")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(230, 200, 131, 51))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 583, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.pushButton.clicked.connect(self.clicked)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Tool to change file name"))
        self.label2.setText(_translate("MainWindow", "Key word from file to search:"))
        self.label1.setText(_translate("MainWindow", "Search folder Path:"))
        self.label.setText(_translate("MainWindow", "Change Format:"))
        self.pushButton.setText(_translate("MainWindow", "Execute"))

    def search_file(self):
        path = self.textEdit2.toPlainText()
        path = repr(path).replace('\\\\','\\').replace('\'','')          #Prevent characters escaping from path strings
        search_word = self.textEdit1.toPlainText()
        self.change_list = []
        self.root = []

        for root, sub_folder, file_name in os.walk(path):               #search files with the search_word in given path
            for name in file_name:
                result = re.search(search_word, name, re.I)
                if result:
                    file_path = root + '\\' + name
                    self.change_list.append(file_path)
                    self.root.append(root)
                    self.textBrowser.append(file_path)
                else:
                    continue

    def change_name(self):

        user_format = self.textEdit.toPlainText()
        user_format = str(user_format)
        result = re.findall(r'x*x', user_format, re.I)                  #get number of the x refer to the frame index
        max = 0
        pattern = ''

        for x in result:                                                #find the real index pattern rather than some word with x
            current = len(x)
            if current > max:
                max = current

        for x in result:
            if len(x) == max:
                pattern = x

        for i,file in enumerate(self.change_list):                      #use new name to rename the file in the change list with its original order
            index = str(i+1)
            num = index.zfill(max)
            new_name = user_format.replace(pattern,num)
            new_path = self.root[int(i)] + '\\' + new_name
            os.rename(file,new_path)
            text_message = "rename {0} to {1} successfully".format(file,new_path)
            self.textBrowser.append(text_message)


    def clicked(self):
        self.search_file()
        self.change_name()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())