首页 > 编程知识 正文

python 批量文件重命名,python批量修改文件夹名称

时间:2023-05-03 18:14:22 阅读:243743 作者:4859

随笔记录几个python上用到的小程序,非常简短,可以直接改路径运行

生成文件夹

例如,我需要在路径 E:/d15/frame/try1/ 下,生成名字为cluster1到cluster9的若干文件夹,其中可能有些文件夹已经被生成过了

程序:

import osfor i in range(1,10): path ='E:/d15/frame/try1/' if not os.path.exists(path+'cluster'+str(i)): os.makedirs(path+'cluster'+str(i)) 文件重命名:

例如,我需要把这个 'E:/d15/frame/class_0/1.10‘ 路径下的所有文件,命名为“1.10_文件序号“的格式

import osfolder_name = 'E:/d15/frame/class_0/1.10' #要命名的文件夹的路径file_names = os.listdir(folder_name) #获取文件的名称os.chdir(folder_name)i = 1for 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.1_1.jpg , 10.1_2.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 os#1获取重命名的文件夹folder_name1 = 'E:/.....' #要命名的文件夹的路径file_names = os.li)stdir(folder_name1)os.chdir(folder_name1)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: name1=name[:c]+'9'+name[c+1:] print(name1) os.rename(name,name1) if a==2: name1=name[:c]+'21'+name[c+1:] print(name1) os.rename(name,name1) if a==3: name1=name[:c]+'33'+name[c+1:] print(name1) os.rename(name,name1) #等等替换,下面不再放了 代码释义:
本人还是小白哈所以在编程上用的方法好像不太智慧…只简要解释一下这种方法我自己走过的弯路:

1.切片问题:
文件名的格式为string,可以用切片的方式选择到所要更改的那个位置的数字,但是在我的需求中,前面序号中带有“10”的会导致切片位置不一样,需要分开考虑,因此加了对整个文件名长度的判断

2.新的数字的生成问题:
一开始非常天真的直接把切片后的内容用代码更改,例如:

a=name[c]b=9+(a-1)*12

但是这样是不对的!因为切片后的数据类型有问题,无法进行数学运算操作
所以加了:

a=name[c]a=int(a)

(个人的程序里数据更改没有用数列写,用公式体现等差数列肯定是更方便的,因为替换的顶多也就到10,太晚了就直接复制粘贴运行了…)

3.文件名的重新拼接问题:
这里也要注意放入的新的数字的数字类型,对于文件名维持原状的部分,仍然用切片的方式获取并拼接,即:

name1=name[:c]+'9'+name[c+1:]

这里也是要注意,如果用公式来体现等比数列并放入其中的话,要有类型的转换
,不能直接将int放进命名中

4.最后的验证

import osfolder_name1 = 'E:/....../' #填文件夹路径file_names = os.listdir(folder_name1)os.chdir(folder_name1)for name in file_names: name=name.strip('.jpg') m=name[-1] m=int(m) #print(m) if m == 2: print("----------------------------------------error")

这里用了个小投机取巧的办法,我的文件夹中,需要更改的内容不超过10,而1-10对应后的数列中,个位数没有是2的,所以这里我用“查找个位数是否为2,有则输出error”的方法进行的检查

在一开始,本来是直接想

m=name[-5]

来取到更改的个位数(-1到-4对应“.jpg”,-5即对应要验证的个位数),但这样会有报错: String index out of range(这里我也不懂为什么超出范围了…)
因此换了个方法试了一下,即先将“.jpg"去掉:

name=name.strip('.jpg')

然后切片就变成了:

m=name[-1]

运行后没有超出范围的报错,可以进行查验

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。