日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python和perl實現批量對目錄下電子書文件重命名的代碼分享

系統 1897 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");


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 永春县| 岢岚县| 石阡县| 万盛区| 房山区| 隆林| 囊谦县| 来安县| 库尔勒市| 景泰县| 玉林市| 龙泉市| 浑源县| 宁都县| 普兰县| 东港市| 大渡口区| 石台县| 铁力市| 五河县| 芮城县| 宣恩县| 庄浪县| 资阳市| 花莲市| 花莲县| 得荣县| 凤凰县| 商丘市| 扶绥县| 安仁县| 绥中县| 额敏县| 镇雄县| 岑巩县| 石渠县| 斗六市| 建昌县| 马山县| 河西区| 佛山市|