Python 批量重命名文件

本文介绍了一个Python脚本,用于批量重命名指定文件夹下的文件,并提供了撤销功能。该脚本通过接收目标路径及新的文件名模式作为输入,然后根据模式进行重命名。此外,还实现了撤销最后一次重命名的功能。

原文出处:http://www.cnblogs.com/pzxbc/archive/2012/03/17/2404060.html

 

 1 #!\usr\bin\env python
 2 # -*- coding: utf-8 -*-
 3 # Author: PZX
 4 # FileName: batchrename.py
 5 # Function: 批量命名某一文件夹下的文件名
 6 
 7 import sys
 8 import os
 9 
10 def UsePrompt():
11     #如果省略path,则path为当前路径
12     print 'Useage: batchrename.py [path] newfilenames'
13     sys.exit()
14 
15 def BatchRename(path, pattern):
16     #设置路径
17     os.chdir(path)
18     fileList = os.listdir(path)
19     
20     dotIndex = pattern.rfind('.')
21     fileName = pattern[ : dotIndex]
22     fileExt = pattern[dotIndex : ]
23     genNum = 0
24     for fileItem in fileList:
25         fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt
26         os.rename(fileItem, fileFullName)
27         print (fileItem + ' => ' + fileFullName) 
28         genNum += 1
29 
30 def main():
31     if len(sys.argv) == 3:
32         path = sys.argv[1]
33         pattern = sys.argv[2]
34     elif len(sys.argv) == 2:
35         path = os.getcwd()
36         pattern = sys.argv[1]
37     else:
38         UsePrompt()
39     confirm = raw_input('Confirm(y|n): ')
40     if confirm == 'n':
41         sys.exit()
42     BatchRename(path, pattern)
43     
44 if __name__ == '__main__':
45     main()

 

新增:

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

 

 1 #!\usr\bin\env python
 2 # -*- coding: utf-8 -*-
 3 # Author: PZX
 4 # FileName: batchrename.py
 5 # Function: 批量命名某一文件夹下的文件名
 6 
 7 import sys
 8 import os
 9 import os.path
10 import pickle
11 
12 def UsePrompt():
13     #如果省略path,则path为当前路径
14     print 'Useage: batchrename.py [path] [newfilenames | /r]'
15     print '\tuse /r to cancel the renaming operation'
16     sys.exit()
17 
18 def BatchRename(path, pattern):
19     #设置路径
20     os.chdir(path)
21     fileList = os.listdir(path)
22     
23     dotIndex = pattern.rfind('.')
24     fileName = pattern[ : dotIndex]
25     fileExt = pattern[dotIndex : ]
26     genNum = 0
27     fileNameDict = {}
28     for fileItem in fileList:
29         fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt
30         os.rename(fileItem, fileFullName)
31         genNum += 1
32         print (str(genNum) + ': ' + fileItem + ' => ' + fileFullName) 
33         fileNameDict[fileItem] = fileFullName
34     
35     #保存重命名的记录
36     recordDir = os.path.dirname(__file__)
37     recordPath = os.path.join(recordDir, 'batchrenamerecord') 
38     recordFile = file(recordPath, 'wb')
39     pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL)
40     pickle.dump(fileNameDict, recordFile, pickle.HIGHEST_PROTOCOL)
41     recordFile.close()
42     
43 def CancelBatchRename():
44     #读取上一次重命名的记录文件
45     recordDir = os.path.dirname(__file__)
46     recordPath = os.path.join(recordDir, 'batchrenamerecord')
47     recordFile = file(recordPath, 'rb')
48     path = pickle.load(recordFile)
49     fileNameDict = pickle.load(recordFile)
50     recordFile.close()
51     
52     os.chdir(path)
53     
54     #撤销上一次重命名
55     genNum = 0
56     newFileNameDict = {}
57     for orgName, newName in fileNameDict.items():
58         os.rename(newName, orgName)
59         genNum += 1
60         print (str(genNum) + ': ' + newName + ' => ' + orgName)
61         newFileNameDict[newName] = orgName
62  
63     recordDir = os.path.dirname(__file__)
64     recordPath = os.path.join(recordDir, 'batchrenamerecord') 
65     recordFile = file(recordPath, 'wb')
66     pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL)
67     pickle.dump(newFileNameDict, recordFile, pickle.HIGHEST_PROTOCOL)
68     recordFile.close()   
69     
70 
71 def main():
72     cancelling = False
73     if len(sys.argv) == 3:
74         path = sys.argv[1]
75         pattern = sys.argv[2]
76     elif len(sys.argv) == 2:
77         if sys.argv[1] == '/r':
78             cancelling = True
79         else:
80             path = os.getcwd()
81             pattern = sys.argv[1]
82     else:
83         UsePrompt()
84     confirm = raw_input('Confirm(y|n): ')
85     if confirm == 'n':
86         sys.exit()
87     if cancelling:
88         CancelBatchRename()
89     else:
90         BatchRename(path, pattern)
91     
92 if __name__ == '__main__':
93     main()

 

 

 

 

转载于:https://www.cnblogs.com/imjc/p/imjc.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值