最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python和perl实现批量对目录下电子书文件重命名的代码分享

来源:懂视网 责编:小采 时间:2020-11-27 14:31:26
文档

Python和perl实现批量对目录下电子书文件重命名的代码分享

Python和perl实现批量对目录下电子书文件重命名的代码分享:经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名: 例如: 修改前:[脚本之家]Mac OS X for Unix Geeks[www.gxlcms.com].mobi 修改后:Mac
推荐度:
导读Python和perl实现批量对目录下电子书文件重命名的代码分享:经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名: 例如: 修改前:[脚本之家]Mac OS X for Unix Geeks[www.gxlcms.com].mobi 修改后:Mac

经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:
例如:

修改前:[脚本之家]Mac OS X for Unix Geeks[www.gxlcms.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","\[.*\](.*)\[www.gxlcms.com\](.*)",lambda m:m.group(1)+m.group(2))

用perl写了下,感觉代码也没有少写多少

代码如下:


use strict;
use warnings;
use File::Find;

my $regex = "\\[.*\\](.*)\\[www.gxlcms.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 = "\\[.*\\](.*)\\[www.gxlcms.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实现批量对目录下电子书文件重命名的代码分享

Python和perl实现批量对目录下电子书文件重命名的代码分享:经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名: 例如: 修改前:[脚本之家]Mac OS X for Unix Geeks[www.gxlcms.com].mobi 修改后:Mac
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top