經常會遇到下載的文件或電子書,名字中間都包含了一些網址信息,實際使用中由于名字太長不方便,下面的腳本使用正則表達式來對目錄下的所有文件重命名:
例如:
修改前:[武林站長站]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 = "http://[.*//](.*)//[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 = "http://[.*//](.*)//[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;}
新聞熱點
疑難解答