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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
Python对象转换为json的方法步骤
Apr 25 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
python读写文件write和flush的实现方式
Feb 21 Python
python退出循环的方法
Jun 18 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 Python
Python中文纠错的简单实现
Jul 07 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基于base64解码图片与加密图片还原实例
2014/11/03 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
HTML5附件拖拽上传drop & google.gears实现代码
2011/04/28 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
javascript实现导航栏分页效果
2019/06/27 Javascript
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python中decorator使用实例
2015/04/14 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
留学自荐信
2013/10/10 职场文书
我的求职择业计划书
2014/04/04 职场文书
维稳工作情况汇报
2014/10/27 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书