Python和perl实现批量对目录下电子书文件重命名的代码分享
admin
2023-07-31 02:11:02
0

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

修改前:[脚本之家]Mac OS X for Unix Geeks[www.jb51.net].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.jb51.net\\](.*)\”,lambda m:m.group(1)+m.group(2))

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

复制代码 代码如下:
use strict;
use warnings;
use File::Find;

my $regex = \”\\\\[.*\\\\](.*)\\\\[www.jb51.net\\\\](.*)\”;
# $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.jb51.net\\\\](.*)\”;
# $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\”);

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...