• Python实例31[批量对目录下文件重命名]


    经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:
    例如:

    修改前:[大家网]Mac OS X for Unix Geeks[www.TopSage.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","\[.*\](.*)\[www.TopSage.com\](.*)",lambda m:m.group(1)+m.group(2))

    用perl写了下,感觉代码也没有少写多少

    use strict;
    use warnings;
    use File::Find;

    my $regex = "\\[.*\\](.*)\\[www.TopSage.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 = "\\[.*\\](.*)\\[www.TopSage.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");  

    完! 

  • 相关阅读:
    mass Framework spec模块 v2
    素数判断算法(高效率)
    修改Win7远程桌面端口【适用XP/2003】
    一步一步写算法(之hash表)
    DropdownList绑定的两种方法
    JDK1.5官方下载_JDK5官方下载_JDK1.5API(chm)下载_JDK5APICHM中文参考下载_JDK1.5下载_JDK5下载
    HTTPS 方式访问网站
    薏米红豆粥功效及做法介绍
    教你用笔记本破解无线路由器密码
    HTTPS那些事(一)HTTPS原理
  • 原文地址:https://www.cnblogs.com/itech/p/2464686.html
Copyright © 2020-2023  润新知