perl python文本处理_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:\\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");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值