免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4456 | 回复: 2
打印 上一主题 下一主题

Python - 批量文件重命名 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-27 13:26 |只看该作者 |倒序浏览
转:John Smith

Python - 批量文件重命名



两个目标两个:

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

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

附加功能:

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

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

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

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

代码:
  1. import os# 获取目录下的子目录
  2. def subdirs(path):   
  3. dl = [];   
  4. for i in os.walk(path, False):        
  5. for d in i[1]:            
  6. dl.append(os.path.join(path, d))   
  7. return dl# 获取目录下的子文件def subfiles(path):   
  8. fl = [];   
  9. for i in os.walk(path, False):        
  10. for f in i[2]:            
  11. fl.append(os.path.join(path, f))   
  12. return fl# 根据文件创建时间对文件进行排序
  13. def fsort(files):   
  14. files.sort(key = lambda s: os.path.getctime(s))   
  15. return files# 递增数列生成器class gen:   
  16. def __init__(self, prefix = '', suffix = '', seed = 1, digit = 3):        
  17. self.prefix = prefix        
  18. self.suffix = suffix        
  19. self.seed = seed        
  20. self.digit = digit        
  21. self.it = seed - 1        
  22. def gennext(self):        
  23. self.it += 1        
  24. return '{0}{1:0{3}d}{2}'.format(self.prefix, self.it, self.suffix, self.digit)   
  25. def copy(self):        
  26. return gen(self.prefix, self.suffix, self.seed, self.digit)class renamer:   
  27. def __init__(self, files, ngen = None, delsrc = False, output = ''):        
  28. self.it = 0        
  29. self.total = 0        
  30. self.files = files        
  31. self.delsrc = delsrc        
  32. self.target = output        
  33. if(ngen is None): self.namegen = gen()        
  34. elif(isinstance(ngen, gen)): self.namegen = ngen        
  35. else: raise(TypeError, 'ngen参数只接受gen类型的对象')   
  36. def rename(src, des, delsrc):        
  37. os.rename(src, des)        
  38. if(delsrc == True):            
  39. os.remove(src)   
  40. def run(self):        
  41. self.it = 0        
  42. self.total = len(self.files)        
  43. for f in self.files:            
  44. dn = os.path.dirname(f)            
  45. ex = os.path.splitext(f)            
  46. nn = self.namegen.gennext() + ex[1]            
  47. np = ''            sd = self.target == ''            
  48. if(sd):               
  49. np = os.path.join(dn, nn)            
  50. else:               
  51. np = os.path.join(self.target, nn)            
  52. print('rename: %s' %(np))            
  53. renamer.rename(f, np, sd and self.delsrc)            
  54. self.it += 1        
  55. print('%d work(s) done' %(self.it))        
  56. print()
  57. # 重命名给定列表中的所有文件
  58. def fs_rename(files, resort = False, ngen = gen(), delsrc = False, output = ''):   
  59. if(resort): fsort(files)   
  60. rn = renamer(files, ngen.copy(), delsrc, output)   
  61. rn.run()
  62. # 重命名给定目录中的所有文件
  63. def ds_rename(dirs, resort = False, ngen = gen(), delsrc = False, output = ''):   
  64. for d in dirs:        
  65. fs = subfiles(d)        
  66. if(resort): fsort(fs)        
  67. print('%d file(s) in %s' %(len(fs), d))      
  68. if(output == '') ngen = ngen.copy()        
  69. rn = renamer(fs, ngen, delsrc, output)        
  70. 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
2 [报告]
发表于 2011-01-27 13:58 |只看该作者
代码怎么没有缩进了?

论坛徽章:
0
3 [报告]
发表于 2011-02-03 18:39 |只看该作者
就是哈,搞点缩进嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP