【Python教程】十二、小试牛刀,写一个给文件批量重命名的小程序名

更多教程请私信~

来源:思路实验室 

作者:室长

到目前为止我们学习了Python的基础语法和模块的使用,虽然没有花太多时间,但我们其实已经可以开始搞事了。不过学习编程和学习其他技能一样,要从简单到复杂,不要贪多嚼不烂,一口吞个胖子。因此室长特地选取了今天的实例,作为我们目前学到的内容的一个练习。

​这个实例的主要知识点:

模块的导入、函数的使用、for循环的使用、字符串的操作

有时候不管是在网上下载素材,存表情包还是自己导出手机里的照片,就发现这些文件的名字都起得可随意了。特别是很多网上的素材,可以说是26个英文字母随机组合了,想在自己的文章里插入想要的图片得文件夹和写文章的页面来回切换,挨个字母地比对,眼睛一下多近视二百多度。

这种情况下,还是改一改素材的名字好。一个两个也就自己改了,这要是几万张图片得把键盘敲坏好几个。好在我们有Python。

那么我们现在就面临这样一个需求,用Python来批量修改文件名。而怎么改呢?目前我们是不会的。

不过没关系,我们之前说过,一个大程序可以拆分成若干个小程序。批量修改文件名要怎么拆分呢?

首先,批量意味着我们可以使用循环来进行操作,所以将修改文件名作为一个小程序,再进行循环,就可以实现批量修改文件名的目的。

问题就到了修改文件名这一程序。修改文件名,修改谁的文件名?修改旧文件的文件名。修改成什么?修改成新的文件名。怎么修改?不知道。

可见通过我们对问题的分析,绝大部分难点我们已经解决了,只差不知道具体如何去修改文件名了。这个时候我们就可以上网去搜一搜这种情况该怎么做。这里室长告诉你,有一个os模块,模块里包含一个rename函数,可以把旧文件名改变成新文件名。

是不是一下子就豁然开朗?其实这个程序我们已经大致编出来了,我们可以画一个示意图:

但是还有一些细节的问题:

Python如何获取旧的文件名?如何生成新的文件名?

对于第一个问题,我们先看一下程序的结构,在循环过程中每一轮都有一个旧的文件被改名,直到这个文件夹下所有文件都被改名,而文件夹下有多少个文件我们是可以知道的。那请大家告诉室长,这种循环是什么循环?

没错,for循环。

既然是for循环,那每个循环里的旧文件名可以来自于哪里?

当然是列表里!

所以这个问题就可以转化为,我们如何将这个文件夹里的所有文件名存入一个列表里?

这下需求就明朗了。那室长告诉你,os模块还有另一个函数——listdir,它可以把指定路径下的所有文件和目录名装到一个列表中。

而对于第二个问题,我们就要考虑我们的需求了。目前来看,我们改名字不是为了表明素材的内容是什么,而是在插入文章时方便去寻找。所以把素材命名为数字序号就已经足够了,在for循环中,每次循环都对一个数字+1,就可以实现我们的目的。

所以这个程序似乎可以这么写:

注意这里的路径和我们平时看到的不一样,我们平时看到的都是单独的反斜杠:

但在字符串中,反斜杠是有特别的意义的,它可以和一些字母符号组成其他不能正常显示的符号,比如想在字符串里加一个回车(换行符),我们就可以输入'\n',这个过程叫做转义,而反斜杠与这些字母符号的组合就叫转义字符。n前边加了反斜杠,就不是n了,就是回车了;手前边加了反斜杠,就不是手了,就是温柔的宇宙了……

那如果我就想在字符串里输入一个反斜杠该怎么办?聪明的同学已经知道了,只要输入两个反斜杠'\\'就可以了。转义转两次就转回来了……

运行一下:

额,什么情况?

解释器报错说需要字符串什么什么的而不是整数,回想我们在数据类型那一期讲到的,不是什么类型的数据都可以往函数里塞,你想给文件命名为1,但在Python中应该是字符串形式的'1'。这里我们可以试一试在Python中分别计算1+1和'1'+'1',看看结果有什么不同。

那么怎么把1转化成'1'呢,很简单,使用str函数:

我们再运行:

又报错!找不到文件,那右边的文件名是哪里来的?

回想我们的程序,我们把路径告诉了listdir函数,函数返回了文件名的列表。难道说这个列表里文件名都是没有路径的?我们赶紧打印一下文件名看一看:

果然,这些都是不含路径的文件名。我们虽然告诉了listdir函数去操作哪个文件夹,但并没有告诉rename函数,所以rename函数根本找不到要改名的文件!

所以这里我们还需要进行一步操作,就是把路径和文件名连接起来:

我们再运行:

没有问题……吗?

怎么都打不开啊?原来我们把后缀名忘了!

我们希望不改动文件的原本文件的后缀名,那么思路就来了:我们可以将文件的后缀名存入变量,再在新文件文件名的后边加上这个变量,就能实现保留后缀名的效果了。而怎么将文件名字符串里的后缀名单独拿出来呢?这回轮到split函数登场了!

split意思是分割,而split函数可以将字符串按照一定规则砍成若干段,返回一个列表。它有两个参数坑位,第一个是字符串,告诉函数在哪个位置开刀;第二个是数字,告诉函数砍几刀。需要注意的是第一个参数的字符串会被直接砍没,以后再连接字符串的时候记得要补回来。

而后缀名和文件名中间总是有一个点来分隔的,这正是我们下手的好地方:

再运行看看(使用素材的记得把上一次改成没有后缀名的文件删掉,重新拷贝一下素材):

这下终于没问题了!

这一次我们终于凭借着之前的知识正式地编写了一个有用的程序,最重要的是我们沿着反向思路把一个复杂的问题分解成了若干简单的问题。希望这样一个小小的例子可以给大家带来启发,带来信心。

不过就在刚才,有认真的同学可能发现了,我们代码里使用split函数的用法跟之前不太一样,是file.split(),在字符串变量后加了一个点,后接函数,这是个什么用法?

这就问到关键了,在这个用法之后隐藏着Python强大的功能,我们会在后边几期为大家介绍。请关注下期:我连对象都找不到还让我用对象?类与对象(一

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值