这一回我需要完成的任务是把“照片”目录下面的数百个以“数字+中文姓名.jpg”的文件批量重命名,我需要把“数字”删除,保留“中文姓名.jpg”,手工改名将是一件繁琐无趣的事。很自然我想到了我一直很喜欢的Python,当然,在这里除了Python还可以用Perl、Ruby、PHP、DOS Batch、VBS,如果你愿意还可以用C++、Java,不过我肯定不愿意。如果你没有听说过这些看似很高深的术语,也没有关系,忘了他们吧,我们只要来看看Python就可以了。

Python的安装我就不介绍了,请大家百度:Python,注意我现在使用的是2.7.x的版本,请大家不要安装3.x的版本(暂时不解释)。

我是这样操作的:

1、先把“照片”目录打开。

2、在“资源管理器”的空白处右击,弹出菜单,“新建”-〉“文本文档”。

3、将新建的文本文档“新建文本文档.txt”(如果没有".txt"请百度:显示文件扩展名)重命名(快捷键F2)为“rename.py”,弹出更改文件扩展名的提醒,确认。

4、右键选择编辑“rename.py”,输入并保存以下内容:



import os, re
for item in os.listdir('.'):
   if (re.match(r"^\d+", item)):
   print item
   newname = re.sub(r"(\d+)", "", item)
   os.rename(item, newname)
   print "-->" + newname



你现在看不懂也没关系,后面我会解释给你听。

5、按住键盘上的Shift键的同时在“资源管理器”空白处右击,选择“在此处打开命令窗口”。

6、在弹出的黑窗口中输入:python rename.py,然后回车

7、在窗口中会显示更名的过程,稍等片刻,任务完成。

 

好的,我们现在来仔细看看这几句话(专业点就是这几行代码)都干了些什么:

Line 1:



import os, re



这一行表明我们这次批量重命名需要用到两个工具(专业一点叫模块):系统(operating system)、正则(regular expression)。

系统工具可以用来操作文件和目录,包括我在代码里面的取文件名和重命名的功能;而正则(表达式)则有点复杂,简单说,正则就是按照某一种模式处理文本的一种工具。

我们在这里把 os, re 导入(import)到我们的代码里面,这样我们就可以在后面使用这两个工具的功能了。

Line 2:

我们在这里空一行,这并不是必须的,但是这样比较美观。

Line 3:



for item in os.listdir('.'):
    doSomething...



这句话的意思是说,我们下面将对这个代码文件所在的目录(也就是"."目录,系统里面".."表示上一级目录,"."表示本级目录)下面的每一个文件处理一遍。os.listdir('.')能够把本级目录下面的所有文件名列出来,然后在for语句的帮助下,一次又一次的把名字交给变量item,直到所有名字都处理了一遍。

下面我举一个栗子,大家就明白for的用法了:



for 小屁孩 in 我的房间的小屁孩们: 打一顿(小屁孩)



这句话的意思就是把在我房间的每一个小屁孩打一顿。但是这样未免太暴力了,我们改一下:



for 小屁孩 in 我的房间的小屁孩们: if 小屁孩 is 熊孩子: 打一顿(小屁孩)



这里的意思就很清楚了,检查一下我房间里的每一小屁孩是不是熊孩子,如果是熊孩子就打一顿。

for 和 if 的用法就像上面那样,只是记得后面要跟一个冒号(:),然后在 for 或者 if 后面的代码需要缩进4个空格,这样python才知道哪些内容是for需要迭代(迭代就是一种循环)的。

 Line 4:



if (re.match(r"^\d+",item)):
        doSomething...



有了刚才的说明,这句话就很明显了,如果满足某项条件,我们就做某事。但是这里的条件是神马呢?不用急,我慢慢告诉你。

这里就用到了我们re工具的match功能,也就是比较一个文本和某一个模式是否匹配,用法是"re.match(模式, 文本)",如果匹配返回“真(True)”,不匹配返回“假(False)”。

r"^\d+" 的意义我简要说明一下:

1、'r'的意思表示Raw(原始),意思是后面跟的那一串字符是啥样就是啥样(不进行转义),这里为的是简化我们表达式,因为反斜杠“\"有特殊的意义(用来构成转义字符,"\n"表示换行,"\t"表示制表符,"\\"表示'\'本身),如果没有'r',我们需要写成"^(\\d+)"。

2、"^\d+"是正则表达式的写法,意思是开头是一串数字的文本。“^”表示文本的开头,“\d”表示一个数字,“\d+”表示一个以上数字。"^\d+"就表示文本开头就紧接着一个以上数字的模式。

Line 5:



print item



在屏幕上输出当前的文件名。

Line 6:



newname = re.sub(r"(\d+)", "", item)



这一句就涉及到了re工具的另一个功能——替换(substitute),用法“re.sub(模式, 替换成的文本, 原文本)”。在这里就是把item里面的数字((\d+)),替换成空(""),也就相当于把数字删除了,然后把新的文本赋值给newname这个变量。

Line 7:



os.rename(item,newname)



这一句用到了os工具的rename,也就是重命名功能,用法“os.rename(原文件名, 新文件名)”,这一步真正实现了更名的过程。

Line 8:



print "-->" + newname



最后一步,作为提示,我们在屏幕上输出更改以后的文件名。

 

到这里,我们的代码就结束了,其实并不是太复杂,只要你有操作Word的能力,相信你也能掌握的。我这篇文章不指望你马上就能学会Python,只是希望你能够直面Python,然后发现她的美,用她来帮你以后的工作和学习。目前的时代,编程应该是一个受过教育的人的基本素养,和以前的写作一样,你成不了作家,但是也需要为工作和生活掌握写作的能力,而现在,编程几乎是你的科研和工作最有力的工具,而Python又是一门非常易学易用,而且强大的语言,希望你们能够喜欢上她。