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 multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
Python3.x版本中新的字符串格式化方法
Apr 24 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
用tensorflow搭建CNN的方法
Mar 05 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
python实现猜拳游戏项目
Nov 30 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解决约瑟夫环示例
2014/04/09 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python strip()函数 介绍
2013/05/24 Python
Python生成随机验证码的两种方法
2015/12/22 Python
Python做文本按行去重的实现方法
2016/10/19 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
详解python持久化文件读写
2019/04/06 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
网上蛋糕店创业计划书
2014/01/24 职场文书
超市商业计划书
2014/05/04 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript