經(jīng)常會(huì)遇到下載的文件或電子書(shū),名字中間都包含了一些網(wǎng)址信息,實(shí)際使用中由于名字太長(zhǎng)不方便,下面的腳本使用正則表達(dá)式來(lái)對(duì)目錄下的所有文件重命名:
例如:
修改前:[腳本之家]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寫(xiě)了下,感覺(jué)代碼也沒(méi)有少寫(xiě)多少
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 實(shí)現(xiàn)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");
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
