python renamer模块_Python - 批量文件重命名

两个目标两个:

1. 输入一组文件名,进行批量重命名;

2. 输入一组目录名,批量重命名各个目录下的文件。

附加功能:

1. 可根据文件的创建日期对文件重新排序;

2. 重命名方式为递增数列,可带前后缀;

3. 可以指定输出目录,如果不指定输出目录,则在原文件夹中重命名,默认为在原文件夹中进行重命名;

4. 可指定在重命名后删除原文件(只有输出目录不同时有效),默认为不删除。

代码:

importos#获取目录下的子目录defsubdirs(path):

dl=[];foriinos.walk(path, False):fordini[1]:

dl.append(os.path.join(path, d))returndl#获取目录下的子文件defsubfiles(path):

fl=[];foriinos.walk(path, False):forfini[2]:

fl.append(os.path.join(path, f))returnfl#根据文件创建时间对文件进行排序deffsort(files):

files.sort(key=lambdas: os.path.getctime(s))returnfiles#递增数列生成器classgen:def__init__(self, prefix='', suffix='', seed=1, digit=3):

self.prefix=prefix

self.suffix=suffix

self.seed=seed

self.digit=digit

self.it=seed-1defgennext(self):

self.it+=1return'{0}{1:0{3}d}{2}'.format(self.prefix, self.it, self.suffix, self.digit)defcopy(self):returngen(self.prefix, self.suffix, self.seed, self.digit)classrenamer:def__init__(self, files, ngen=None, delsrc=False, output=''):

self.it=0

self.total=0

self.files=files

self.delsrc=delsrc

self.target=outputif(ngenisNone): self.namegen=gen()elif(isinstance(ngen, gen)): self.namegen=ngenelse:raise(TypeError,'ngen参数只接受gen类型的对象')defrename(src, des, delsrc):

os.rename(src, des)if(delsrc==True):

os.remove(src)defrun(self):

self.it=0

self.total=len(self.files)forfinself.files:

dn=os.path.dirname(f)

ex=os.path.splitext(f)

nn=self.namegen.gennext()+ex[1]

np=''sd=self.target==''if(sd):

np=os.path.join(dn, nn)else:

np=os.path.join(self.target, nn)print('rename: %s'%(np))

renamer.rename(f, np, sdandself.delsrc)

self.it+=1print('%d work(s) done'%(self.it))print()#重命名给定列表中的所有文件deffs_rename(files, resort=False, ngen=gen(), delsrc=False, output=''):if(resort): fsort(files)

rn=renamer(files, ngen.copy(), delsrc, output)

rn.run()#重命名给定目录中的所有文件defds_rename(dirs, resort=False, ngen=gen(), delsrc=False, output=''):fordindirs:

fs=subfiles(d)if(resort): fsort(fs)print('%d file(s) in %s'%(len(fs), d))if(output=='') ngen=ngen.copy()

rn=renamer(fs, ngen, delsrc, output)

rn.run()

说明

fs_rename方法对一组文件进行批量重命名。

参数说明:

files: 文件列表;

resort: 是否重新排列文件(按创文件建时间),默认为False;

ngen: 一个gen类型的对象,用于产生文件名;

delsrc: 是否删除原文件,默认为False;

output: 输出路径,默认为'',表示在原文件家中重命名。

ds_rename方法对一组目录中的文件进行批量重命名。

参数说明:

dirs: 目录列表;

resort: 是否重新排列文件(按创文件建时间),默认为False;

ngen: 一个gen类型的对象,用于产生文件名;

delsrc: 是否删除原文件,默认为False;

output: 输出路径,默认为'',表示在原文件家中重命名。

gen类型构造函数创建数列发生器。

参数说明:

prefix: 前缀字符串;

suffix: 后缀字符串;

seed: 起始数;

digit: 数为宽,不够用0补齐。

subdirs方法获取一个目录下的子目录,并返回完整路径。

subfiles方法获取一个目录下的所有文件,并返回完整路径。

fsort方法对一组文件根据其创建时间进行重新排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值