python腳本:批量重命名文件名


  最近在跟着師姐做一個項目,需要不斷地摳樣本,用於學習訓練。每次扣完樣本后都需要重新批量命名一下,雖然Windows7可以批量重命名,但是文件一多的時候就很容易發生資源管理器卡死了。。。因此,決定寫個python的腳本,節省下以后重命名的時間。

  代碼

#!\usr\bin\env python
#
-*- coding: utf-8 -*-
#
Author: PZX
#
FileName: batchrename.py
#
Function: 批量命名某一文件夾下的文件名

import sys
import os

def UsePrompt():
#如果省略path,則path為當前路徑
print 'Useage: batchrename.py [path] newfilenames'
sys.exit()

def BatchRename(path, pattern):
#設置路徑
os.chdir(path)
fileList = os.listdir(path)

dotIndex = pattern.rfind('.')
fileName = pattern[ : dotIndex]
fileExt = pattern[dotIndex : ]
genNum = 0
for fileItem in fileList:
fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt
os.rename(fileItem, fileFullName)
print (fileItem + ' => ' + fileFullName)
genNum += 1

def main():
if len(sys.argv) == 3:
path = sys.argv[1]
pattern = sys.argv[2]
elif len(sys.argv) == 2:
path = os.getcwd()
pattern = sys.argv[1]
else:
UsePrompt()
confirm = raw_input('Confirm(y|n): ')
if confirm == 'n':
sys.exit()
BatchRename(path, pattern)

if __name__ == '__main__':
main()  

 新增:

  添加撤銷上次批量重命名功能。使用方法:batchrename.py /r

  

#!\usr\bin\env python
#
-*- coding: utf-8 -*-
#
Author: PZX
#
FileName: batchrename.py
#
Function: 批量命名某一文件夾下的文件名

import sys
import os
import os.path
import pickle

def UsePrompt():
#如果省略path,則path為當前路徑
print 'Useage: batchrename.py [path] [newfilenames | /r]'
print '\tuse /r to cancel the renaming operation'
sys.exit()

def BatchRename(path, pattern):
#設置路徑
os.chdir(path)
fileList = os.listdir(path)

dotIndex = pattern.rfind('.')
fileName = pattern[ : dotIndex]
fileExt = pattern[dotIndex : ]
genNum = 0
fileNameDict = {}
for fileItem in fileList:
fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt
os.rename(fileItem, fileFullName)
genNum += 1
print (str(genNum) + ': ' + fileItem + ' => ' + fileFullName)
fileNameDict[fileItem] = fileFullName

#保存重命名的記錄
recordDir = os.path.dirname(__file__)
recordPath = os.path.join(recordDir, 'batchrenamerecord')
recordFile = file(recordPath, 'wb')
pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL)
pickle.dump(fileNameDict, recordFile, pickle.HIGHEST_PROTOCOL)
recordFile.close()

def CancelBatchRename():
#讀取上一次重命名的記錄文件
recordDir = os.path.dirname(__file__)
recordPath = os.path.join(recordDir, 'batchrenamerecord')
recordFile = file(recordPath, 'rb')
path = pickle.load(recordFile)
fileNameDict = pickle.load(recordFile)
recordFile.close()

os.chdir(path)

#撤銷上一次重命名
genNum = 0
newFileNameDict = {}
for orgName, newName in fileNameDict.items():
os.rename(newName, orgName)
genNum += 1
print (str(genNum) + ': ' + newName + ' => ' + orgName)
newFileNameDict[newName] = orgName

recordDir = os.path.dirname(__file__)
recordPath = os.path.join(recordDir, 'batchrenamerecord')
recordFile = file(recordPath, 'wb')
pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL)
pickle.dump(newFileNameDict, recordFile, pickle.HIGHEST_PROTOCOL)
recordFile.close()


def main():
cancelling = False
if len(sys.argv) == 3:
path = sys.argv[1]
pattern = sys.argv[2]
elif len(sys.argv) == 2:
if sys.argv[1] == '/r':
cancelling = True
else:
path = os.getcwd()
pattern = sys.argv[1]
else:
UsePrompt()
confirm = raw_input('Confirm(y|n): ')
if confirm == 'n':
sys.exit()
if cancelling:
CancelBatchRename()
else:
BatchRename(path, pattern)

if __name__ == '__main__':
main()



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM