在工作中经常遇到辛苦渲染得到的序列图名字不对,怎么办!
求人不如求自己,用python写一个批量改名的工具,从此改名不求人。比如我想把名字为cat.01.jpg改为dog.001.jpg
写了半天,我终于写出来了,直接上代码:
import os
# 序列图所在的文件夹
folder = r'E:\temp\test\seq'
# 旧名字
oldName = 'cat'
# 新名字
newName = 'dog'
files = [f for f in os.listdir(folder) if os.path.isfile("%s/%s" %(folder, f)) and oldName in f]
os.chdir(folder)
for f in files:
tmp = f.split(".")
num = tmp[1].zfill(3) # 将数字部分的01改为001
new_file = "{0}.{1}.{2}".format(newName, num, tmp[2])
os.rename(f, new_file)
代码逐行解析
files = [f for f in os.listdir(folder) if os.path.isfile("%s/%s" %(folder, f)) and oldName in f]
这句也可以这样写:
files = []
# 遍历folder文件夹里的每个文件
for f in os.listdir(folder):
if os.path.isfile("%s/%s" %(folder, f)) and oldName in f:
files.append(f)
if os.path.isfile("%s/%s" %(folder, f)) and oldName in f:
这里判断f是文件而且文件名字中带oldName的才会继续。这样就找到了所有名字为oldName的文件。
os.chdir(folder)切换当前工作目录为folder。
tmp = f.split(".")
new_file = "{0}.{1}.jpg".format(newName, tmp[1])
这里将文件的名字拆分成[旧名字,数字序列部分,后缀名],然后用新名字替换旧名字重新组合出完整的新名字。os.rename这个方法可以完成文件改名.
最后一个for循环完成改名。
再来一个带界面的 (在houdini16和maya2017里都可以运行).
# coding=utf-8
import os
import sys
from PySide2 import QtGui
from PySide2 import QtCore
from PySide2 import QtWidgets
class ReNameTool(QtWidgets.QDialog):
def __init__(self):
super(ReNameTool, self).__init__()
self.setWindowTitle(u'序列改名')
main_layout = QtWidgets.QVBoxLayout(self)
folder_layout = QtWidgets.QHBoxLayout()
folder_label = QtWidgets.QLabel("folder: ")
self.folder_lineedit = QtWidgets.QLineEdit()
folder_layout.addWidget(folder_label)
folder_layout.addWidget(self.folder_lineedit)
main_layout.addLayout(folder_layout)
old_name_layout = QtWidgets.QHBoxLayout()
old_name_label = QtWidgets.QLabel("old_name: ")
self.old_name_lineedit = QtWidgets.QLineEdit()
old_name_layout.addWidget(old_name_label)
old_name_layout.addWidget(self.old_name_lineedit)
main_layout.addLayout(old_name_layout)
new_name_layout = QtWidgets.QHBoxLayout()
new_name_label = QtWidgets.QLabel("new_name: ")
self.new_name_lineedit = QtWidgets.QLineEdit()
new_name_layout.addWidget(new_name_label)
new_name_layout.addWidget(self.new_name_lineedit)
main_layout.addLayout(new_name_layout)
ok_btn = QtWidgets.QPushButton("ok")
main_layout.addWidget(ok_btn)
ok_btn.clicked.connect(self.rename_it)
def rename_it(self):
# name.01.jpg
folder = self.folder_lineedit.text()
oldName = self.old_name_lineedit.text()
newName = self.new_name_lineedit.text()
files = [f for f in os.listdir(folder) if os.path.isfile("%s/%s" % (folder, f)) and oldName in f]
os.chdir(folder)
for f in files:
tmp = f.split(".")
num = tmp[1].zfill(3)
new_file = "{0}.{1}.{2}".format(newName, num, tmp[2])
os.rename(f, new_file)
# app = QtWidgets.QApplication(sys.argv)
dialog = ReNameTool()
dialog.show()
# app.exec_()
另外推荐几个入门python的网站
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
http://www.runoob.com/python/python-tutorial.html
学了python写了工具还想写个漂亮的界面?学pyqt!
http://www.cnblogs.com/jakeyChen/articles/4103494.html
http://zetcode.com/gui/pyqt5/firstprograms/
https://www.jianshu.com/p/308fea12c8f8
最后写了很多代码,想多人协作外加版本控制怎么办,学git!
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000