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实现的批量下载RFC文档
Mar 10 Python
对于Python的Django框架使用的一些实用建议
Apr 03 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
python numpy 显示图像阵列的实例
Jul 02 Python
python+logging+yaml实现日志分割
Jul 22 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
python列表推导式操作解析
Nov 26 Python
python数据预处理 :数据抽样解析
Feb 24 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python如何输出百分比
Jul 31 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 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 生成随机验证码图片代码
2010/02/08 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
在Linux下调试Python代码的各种方法
2015/04/17 Python
详解Python学习之安装pandas
2019/04/16 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Pytorch释放显存占用方式
2020/01/13 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
Python实现简单猜数字游戏
2021/02/03 Python
先进集体获奖感言
2014/02/13 职场文书
爱国口号
2014/06/19 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
解除同居协议书
2015/01/29 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
民事纠纷协议书
2016/03/23 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
nginx 配置缓存
2022/05/11 Servers