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装饰器使用方法实例
Nov 21 Python
python写的ARP攻击代码实例
Jun 04 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
python基于物品协同过滤算法实现代码
May 31 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
python retrying模块的使用方法详解
Sep 25 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
Python+Appium自动化测试的实战
Jun 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中使用curl伪造IP的简单方法
2015/08/07 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
Javascript 布尔型分析
2008/12/22 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python+opencv实现动态物体追踪
2018/01/09 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
Python hashlib模块用法实例分析
2018/06/12 Python
有关Python的22个编程技巧
2018/08/29 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
python之信息加密题目详解
2019/06/26 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
白宫黑市官网:White House Black Market
2016/11/17 全球购物
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
企业宣传方案
2014/03/04 职场文书
工程索赔意向书
2014/08/30 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
银行服务理念口号
2015/12/25 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL