python怎么批量重命名文件,python如何对文件进行批量命名

  python怎么批量重命名文件,python如何对文件进行批量命名

  随笔记录了几个用python编写的小程序,很短,改变路径就可以直接运行。

  生成文件夹:比如我需要在路径E:/d15/frame/try1/下生成几个名为cluster1到cluster9的文件夹,其中一些可能已经生成了。

  程序:

  导入osfor i in range(1,10):path= e:/d15/frame/try 1/ if not OS . path . exists(path cluster str(I)):OS . makediters(path cluster str(I))文件重命名:比如我需要把这个 e:/

  import folder _ name= e:/d15/frame/class _ 0/1.10 #要命名的文件夹的路径file _ names=OS . listdir(folder _ name)#获取文件的名称OS . chdir(folder _ name)I=1 for name in file _ names:OS . rename(name, 1.10 _ str (i)。jpg) #重命名i=1文件名批量变动

  最近题目上有个小需求,类似于把原图命名为:1.1 _ 1.jpg,1.1 _ 2.jpg,…1.2 _ 1.jpg,1.2 _ 2.jpg,…1.10 _ 1.jpg,1.10 _ 2.jpg,…2.1 _ 1.jpg。

  …10.10_1.jpg…

  其中“_”后的1 2 3 4 5变为另一个等差数列9,21,33…,即:

  1.1_9.jpg,1.1_21.jpg,…1.2_9.jpg,1.2_21.jpg,…1.10_9.jpg,1.10_21.jpg,…2.1_9.jpg…10.1_9.jpg,10.1_21.jpg,

  …10.10_9.jpg…

  问题焦点:

  1.只改中间的号,其余的保留。

  2.“_”后面的数字范围对每组都不一样,比如有的是1到5,有的是1到7。

  把程序放在第一位:

  Import # 1获取重命名的文件夹folder _ name1= e:/. #要命名的文件夹的路径file _ names=OS . Li)stdir(folder _ name 1)OS . chdir(folder _ name 1)for name in file _ names:m=name[0]print(m)m=int(m)if m in range(1,10):if len(name)==14:c=9 a=name[c]a=int(a)if a==1:name 1=name[:c] 9 name[C1:]print(name 1)OS . rename(name,1)重命名(name,name1)如果a==3:name 1=name[:c] 33 name[C1:]print(name 1

  我还是小白哈,所以编程用的方法好像不是很明智…我就简单说一下我用这个方法走过的弯路:1。切片问题:

  文件名的格式是字符串,可以是用切片的方式选择到所要更改的那个位置的数字,但是在我的要求中,之前的序列号是带有“10”的会导致切片位置不一样,需要另外考虑,所以加了对整个文件名长度的判断

  2.新数字的生成:

  起初,用代码直接改变切片内容是幼稚的,例如:

  A=name[c]b=9 (a-1)*12但是这是不对的!因为切片后的数据类型有问题,无法进行数学运算操作

  所以补充一下:

  A=name[c]a=int(a)(个人程序中的数据变化不是串行写的,用公式体现等差数列肯定更方便,因为最大替换是10,直接复制粘贴来不及…)

  3.文件名的重新拼接:

  这里也需要注意放入的新的数字的数字类型。对于有原文件名的部分,仍由切片获取并拼接,即:

  1=name [:c] 9 name [c 1:]这里还需要注意的是,如果用一个公式来表示几何级数并放入其中,应该是类型的转换

  ,不能把int直接放在名字里。

  4.最终验证

  导入folder _ name1= e:/./#在file _ names: name=name.strip()中填入name的文件夹路径file _ names=OS . listdir(folder _ name 1)OS . chdir(folder _ name 1)。jpg )M=name[-1]M=int(M)# print(M)if M==2:print(-。

  一开始我直接想。

  M=name[-5]获取改变后的个位数(-1到-4对应于"。jpg”,而-5对应的是要验证的个位数),但是这样会导致错误:String index out of range(我也不知道为什么这里超出范围了……)

  所以尝试另一种方法,即先去掉“.jpg”:

  Name=name.strip(。jpg )那么切片变成:

  M=name[-1]运行后没有超范围错误,可以检查。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: