Python和perl实现批量对目录下电子书文件重命名的代码分享


Posted in Python onNovember 21, 2014

经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:
例如:

修改前:[三水点靠木]Mac OS X for Unix Geeks[3water.com].mobi
修改后:Mac OS X for Unix Geeks.mobi

python代码如下:

import os

import re
def rename_dir(dir,regex,f):

  if not os.path.isdir(dir) or not os.path.exists(dir) : 

    print("The input is not one directory or not exist.")

  for root,subdirs,files in os.walk(dir):

    for name in files:

      oldname = name          

      newname = re.sub(regex,f,name)

      print("Before : " + os.path.join(root,oldname))

      print("After  :  " + os.path.join(root,newname))

      if not name == newname and not os.path.exists(os.path.join(root,newname)):

        os.rename(os.path.join(root,oldname),os.path.join(root,newname))

    for dir in subdirs:

        rename_dir(os.path.join(root,dir))
rename_dir("C:\\Python31\\test","\[.*\](.*)\[3water.com\](.*)",lambda m:m.group(1)+m.group(2))

用perl写了下,感觉代码也没有少写多少

use strict;

use warnings;

use File::Find;
my $regex = "\\[.*\\](.*)\\[3water.com\\](.*)";

# $replace doesn't work

my $replace = "\$1\$2";
sub wanted {

 my $name = $File::Find::name;

 if( -f $name){

   my $newname =$name;

   $newname =~ s/$regex/$1$2/;

   print "Before: $File::Find::name\n";

   print "After : $newname\n";

   if( !-e $newname) {

     rename($name, $newname);

   }

 }

}
sub rename_dir{

  my ($dir,) = @_;

  if (!-d $dir || !-e $dir){

    print"The input is not directory or not exist.";

  }

  find(\&wanted, $dir);

}

&rename_dir("c:\\perl\\test");

perl 实现2

use strict;

use warnings;
my $regex = "\\[.*\\](.*)\\[3water.com\\](.*)";

# $replace doesn't work

my $replace = "\$1\$2";
sub rename_dir{

    my $dir = shift;

    if (!-d $dir || !-e $dir){

      print"The input is not directory or not exist.";

    }

    opendir(DIR, $dir) || die "Cannot opendir $dir.";

    foreach (readdir(DIR)) {

      if ($_ eq '.' || $_ eq '..') {next;}

      my $name = $dir.'/'.$_;

      if(-d $name){ 

        rename_dir($name);         

        next;

        }

      my $newname =$_;

      $newname =~ s/$regex/$1$2/;

      $newname = $dir.'/'.$newname;

      print "Before : $name\n";

      print "After  : $newname\n";

      rename($name,$newname);

    }

    #closedir(DIR);

}

&rename_dir("c:\\perl\\test");
Python 相关文章推荐
python 字符串格式化代码
Mar 17 Python
Python 随机生成中文验证码的实例代码
Mar 20 Python
Python脚本实现格式化css文件
Apr 08 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
python实现二叉树的遍历
Dec 11 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
Python tkinter模版代码实例
Feb 05 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
python tqdm实现进度条的示例代码
Nov 10 Python
python爬虫如何解决图片验证码
Feb 14 Python
Django实现聊天机器人
May 31 Python
Python实现的下载8000首儿歌的代码分享
Nov 21 #Python
Python常用模块介绍
Nov 21 #Python
Python使用py2exe打包程序介绍
Nov 20 #Python
Python实现的tab文件操作类分享
Nov 20 #Python
Python实现的ini文件操作类分享
Nov 20 #Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 #Python
python有证书的加密解密实现方法
Nov 19 #Python
You might like
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
基于jquery的表格排序
2010/09/11 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
大专生自我鉴定范文
2013/10/01 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
会计专业的自荐信
2013/12/12 职场文书
初中生自我评价
2014/02/01 职场文书
担保书格式及范文
2014/04/01 职场文书
励志演讲稿800字
2014/08/21 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
什么是SOLID
2022/03/24 Javascript