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和perl实现批量对目录下电子书文件重命名的代码分享
- Author -
junjie声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@