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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
Python采用Django制作简易的知乎日报API
Aug 03 Python
python rsa 加密解密
Mar 20 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
Python Excel处理库openpyxl使用详解
May 09 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
基于python实现可视化生成二维码工具
Jul 08 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
python 标准库原理与用法详解之os.path篇
Oct 24 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
php反射应用示例
2014/02/25 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
Dojo 学习要点
2010/09/03 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Python实现把xml或xsl转换为html格式
2015/04/08 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
如何在python中实现线性回归
2020/08/10 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
美术国培研修感言
2014/02/12 职场文书
IT工程师岗位职责
2014/07/04 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
放飞理想主题班会
2015/08/14 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
Spring整合Mybatis的全过程
2021/06/28 Java/Android
javascript实现计算器功能详解流程
2021/11/01 Javascript
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL