手机
当前位置:查字典教程网 >脚本专栏 >python >Python和perl实现批量对目录下电子书文件重命名的代码分享
Python和perl实现批量对目录下电子书文件重命名的代码分享
摘要:经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名...

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

例如:

修改前:[查字典教程网]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:Python31test","[.*](.*)[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::namen";

print "After : $newnamen";

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:perltest");

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 : $namen";

print "After : $newnamen";

rename($name,$newname);

}

#closedir(DIR);

}

&rename_dir("c:perltest");

【Python和perl实现批量对目录下电子书文件重命名的代码分享】相关文章:

Python获取远程文件大小的函数代码分享

Python实现扫描指定目录下的子目录及文件的方法

Python实现的简单万年历例子分享

Python 文件重命名工具代码

python实现异步回调机制代码分享

Python常见文件操作的函数示例代码

Python实现多线程下载文件的代码实例

python 实现堆排序算法代码

Python实现端口复用实例代码

python 生成目录树及显示文件大小的代码

精品推荐
分类导航