Home Page
Next
Last

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_())
Home Page
Next
Last