
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_())