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显示生日是星期几的方法
May 27 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
Python数据类型之Number数字操作实例详解
May 08 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
浅析python中while循环和for循环
Nov 19 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
Python通过Pillow实现图片对比
Apr 29 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 Python
python开发人人对战的五子棋小游戏
May 02 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
Symfony生成二维码的方法
2016/02/04 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
document.write的几点使用心得
2014/05/14 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python处理session的方法整理
2019/08/29 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
会计岗位职责
2013/11/08 职场文书
机关会计岗位职责
2014/04/08 职场文书
公休请假条
2014/04/11 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python