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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python类属性的延迟计算
Oct 22 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
python使用sqlite3时游标使用方法
Mar 13 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
对python中if语句的真假判断实例详解
Feb 18 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
Jul 31 Python
Python笔记之观察者模式
Nov 20 Python
基于Python脚本实现邮件报警功能
May 20 Python
python rsa-oaep加密的示例代码
Sep 23 Python
requests在python中发送请求的实例讲解
Feb 17 Python
Python保存并浏览用户的历史记录
Apr 29 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调用Google translate_tts api实现代码
2013/08/07 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
Python的装饰器使用详解
2017/06/26 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
python根据多个文件名批量查找文件
2019/08/13 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
浅析python实现动态规划背包问题
2020/12/31 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
css 元素选择器的简单实例
2016/05/23 HTML / CSS
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
十佳大学生村官事迹
2014/01/09 职场文书
高一历史教学反思
2014/01/13 职场文书
教师绩效考核方案
2014/01/21 职场文书
留学自荐信写作方法
2014/01/27 职场文书
商务经理岗位职责
2014/08/03 职场文书
三孔导游词
2015/02/05 职场文书
中国合伙人观后感
2015/06/02 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
创业计划书之书店
2019/09/10 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
MySQL 如何设计统计数据表
2021/06/15 MySQL