Python和perl实现批量对目录下电子书文件重命名的代码分享
2014-11-21 00:00
1171 查看
经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:
例如:
修改前:[脚本之家]Mac OS X for Unix Geeks[www.jb51.net].mobi
修改后:Mac OS X for Unix Geeks.mobi
python代码如下:
用perl写了下,感觉代码也没有少写多少
perl 实现2
例如:
修改前:[脚本之家]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");
相关文章推荐
- Python和perl实现批量对目录下电子书文件重命名的代码分享
- java代码实现根据JSON文件进行批量文件重命名或者改目录结构
- Python实例31[批量对目录下文件重命名]
- 用python实现批量重命名文件的代码
- Python中使用md5sum检查目录中相同文件代码分享
- python脚本实现统计日志文件中的ip访问次数代码分享
- Python中的文件和目录操作实现代码
- Python中的文件和目录操作实现代码
- Python实现批量把SVG格式转成png、pdf格式的代码分享
- Python实现读取目录所有文件的文件名并保存到txt文件代码
- shell脚本中使用iconv实现批量文件转码的代码分享
- Python中的文件和目录操作实现代码
- Python实例31[批量对目录下文件重命名]
- python实现指定目录下批量文件的单词计数:并发版本
- python实现指定目录下批量文件的单词计数:并发版本
- 用python实现批量重命名文件的代码
- python批量修改文件后缀示例代码分享
- python实现指定目录下批量文件的单词计数:串行版本
- Python实现读取目录所有文件的文件名并保存到txt文件代码
- bat和python批量重命名文件的实现代码