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获取糗百图片代码实例
Dec 18 Python
python3.3实现乘法表示例
Feb 07 Python
python实现简单的计时器功能函数
Mar 14 Python
浅谈Python程序与C++程序的联合使用
Apr 07 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 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 组件化编程技巧
2009/06/06 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python条件和循环的使用方法
2013/11/01 Python
Python常用模块用法分析
2014/09/08 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
python操作cfg配置文件方式
2019/12/22 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
《只有一个地球》教学反思
2014/02/14 职场文书
优秀学生获奖感言
2014/02/15 职场文书
廉洁自律承诺书
2014/03/27 职场文书
药品营销策划方案
2014/06/15 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers