利用Python批量重命名文件(给非技术人员的Python实例参考)
Posted cyc-endeavor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Python批量重命名文件(给非技术人员的Python实例参考)相关的知识,希望对你有一定的参考价值。
转自https://www.cnblogs.com/brucex/p/python-rename-example.html
这一回我需要完成的任务是把“照片”目录下面的数百个以“数字+中文姓名.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(原始),意思是后面跟的那一串字符是啥样就是啥样(不进行转义),这里为的是简化我们表达式,因为反斜杠“"有特殊的意义(用来构成转义字符," "表示换行," "表示制表符,"\\"表示‘‘本身),如果没有‘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又是一门非常易学易用,而且强大的语言,希望你们能够喜欢上她。
这里是Python的一些资料,大家可以根据这些去学习:
《Head First Python(中文版)》亚马逊 笨办法学 Python(HTML版)
如果有任何疑问欢迎留言,我会尽力解答!
以上是关于利用Python批量重命名文件(给非技术人员的Python实例参考)的主要内容,如果未能解决你的问题,请参考以下文章