Python笔记4 实例之批量修改文件名


一个简单的实现批量修改文件名的例子,以司徒TX的代码为蓝本。

http://www.cnblogs.com/rubylouvre/archive/2011/07/26/2117239.html

 

ulipad 4.0下测试,全部代码如下:

 1 # -*- coding: utf-8 -*-
2 # Filename: BatchChangeFileName.py
3
4 import os
5 import sys
6
7 def TraverseFolder(path):
8 print "<----folder&file---->"
9 no=0
10 for (path,dirs,files) in os.walk(path):
11 print
12 no += 1
13 print "No.%d"%no
14 print "path=%s"%path
15 if len(dirs)!=0:
16 #print type(dirs)
17 subfolders = ''
18 for dir in dirs:
19 subfolders += dir+';'
20 subfolders = '[' + subfolders + ']'
21 print "subfolders=%s"%subfolders
22 if len(files)!=0:
23 filenames = ''
24 for filename in files:
25 filenames += filename+';'
26 filenames = '[' + filenames + ']'
27 print "files=%s"%filenames
28 print "<----folder&file---->"
29
30
31 def RenameFile():
32 str = u'请输入要处理的文件夹路径====>'
33 path = raw_input(str.encode('gbk'))
34 print path
35
36 str = u'请输入源文件类型(不包括.)====>'
37 old_ext = "."+raw_input(str.encode('gbk'))
38 print old_ext
39
40 str = u'请输入目标文件类型(不包括.)====>'
41 new_ext = "."+raw_input(str.encode('gbk'))
42 print new_ext
43
44 print #输出空行占位
45 TraverseFolder(path)
46 print
47
48 str = u'开始批量更名'
49 print str
50 print '<-----------------'
51 changedCount = 0
52 for (path,dirs,files) in os.walk(path):
53 for filename in files:
54 ext = os.path.splitext(filename)[1] #取得文件类型,注意它还带着点号
55 if (ext == old_ext):
56 changedCount += 1
57 newname = filename.replace(old_ext, new_ext)
58 oldpath = path + "\\" + filename
59 newpath = path + "\\" + newname
60 try:
61 os.rename(oldpath, newpath)
62 print 'No.%d'%changedCount, 'change', oldpath, 'to', newpath
63 except BaseException, e:
64 print(str(e))
65 print '----------------->'
66
67
68 if __name__ == '__main__':
69 RenameFile()
70
71 print
72 raw_input("press Enter to exit")
73 sys.exit()


完成这段程序耗费了我2个多小时,主要的时间花在对中文的支持上了。python 2.x的unicode感觉很别扭,由此看3.x还是有一定道理的啦。

 

PS:曾经提到过不知如何输出信息到message窗口上,下午写代码的过程中竟然形成了一个习惯,勾选"Python->设置参数->Show the selected Arguments at dialog Python Program run",这样每次F5都会弹出参数设置对话框,观察语法错误则选上"Redirect input and output",反之运行则取消勾选。

 

看来不必着急一上来就求大求全,常常是用着用着就自然而然的清楚了,其他的事情不也是如此嘛,触类旁通啊!

posted @ 2011-09-20 17:54  AlanWang  阅读(4682)  评论(0编辑  收藏  举报