生成目录结构算法的bash, perl和python实现
2013-01-05 16:29
771 查看
这是分别用bash, perl和python实现同一个算法来结构化打印出指定目录的实现。输出结果类似如下:
BASH CODE:
#! /bin/bash print_dir(){ n_tab=$2 until [ "$n_tab" = "0" ] do printf "\t" n_tab=$(($n_tab - 1)) done echo ${1##*/} } list_dir(){ print_dir $@ if [ -d $1 ] then for sub_dir in $(ls $1); do list_dir $1/$sub_dir $(($2+1)) done fi } list_directory(){ list_dir $1 0 } if [ "$#" != "1" ];then echo "Usage: ./make_dir_tree.sh dir" exit 1 fi #ls $1 >/dev/null 2>&1 if [ ! ls $1 >/dev/null 2>&1 ] then echo "This is not a valid directory or file!" exit 1 fi list_directory $1
结论: bash的语法非常琐碎,进行算数运算不方便 ,没有自增,自减运算,如$a=$a+1的运算在bash中表达式为a=$(($a+1))。 布尔运算主要借助test或[ ]表达式,也可用命令行的返回值,command成功执行返回真。 使用[ ]时要注意空格 : (while)if空格[空格-d空格directory空格]。最后发现了${}操作符很好用,主要拿来在字符串中插入扩展的变量用。$1是从命令行传给脚本的第一个参数,$0是脚本名字,$#是除脚本名外的参数个数。
PERL CODE:
#! /usr/bin/perl use strict; use 5.010; sub list_dir { my ($dir, $depth) = @_; printf "%s%s\n", "\t"x$depth, $dir; if( -d $dir ){ my @list = <$dir/*>; foreach (@list){ list_dir($_, $depth+1) } } } sub list_directory { list_dir($ARGV[0], 0) } die "Usage: ./make_dir_tree.pl dir\n" if @ARGV != 1; die "This is not a valid directory or file!\n" unless -d $ARGV[0] or -f _; list_directory;
结论:perl的文件测试操作很好用,用法和shell相似,但更简洁。perl的表达能力感觉比较强,代码可以写到很短。$ARGV[0]是命令行传入的第一个参数。perl下面可用"字符串"x表达式 这种方式来重复字符串。
PYTHON CODE:
#! /usr/bin/python import sys, os, glob def list_dir(dir, depth): print("%s%s"% ("\t"*depth, dir)) if(os.path.isdir(dir)): for sub_dir in glob.glob(dir+'/*'): list_dir(sub_dir, depth+1) def list_directory(): list_dir(root, 0) if(len(sys.argv) != 2): print "Usage: ./make_dir_tree.py dir" exit(1) root = sys.argv[1] if(not os.path.exists(root)): print "This is not a valid directory or file!\n" exit(1) list_directory()结论:python也有很强表达力,代码很干净。sys.argv[0]是脚本名,sys.argv[1]是第一个参数。和perl相比,python在文件和路径测试上要显示调用os.path模块下面的api,也不能说不方便,主要是很容易忘记需要的api在哪个模块下。python下可用"字符串"*表达式 来重复字符串。
相关文章推荐
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法
- python 实现红包随机生成算法的简单实例
- python实现目录树生成示例
- [置顶] 《统计学习方法》 决策树 ID3和C4.5 生成算法 Python实现
- 数据结构(C#)--图结构的实现输出以及图结构的深度和广度优先搜索和Dijkstra 算法的最小路径以及最小生成树的实现
- python实现prim 最小生成树算法
- python 实现红包随机生成算法
- 用python或者perl实现简单的http服务器目录共享
- 常用查找数据结构及算法(Python实现)
- Python 数据结构与算法——二叉搜索树的实现
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 习题2.8 随机数组的三种生成算法(补) 将bash的实现翻译成比较纯正的bash风格
- 数据结构——图常用算法实现(DFS,BFS,最小生成树,最短路径,拓扑序列)
- node2vec: 网络结构特征提取、论文、算法python实现
- 数据结构之---C语言实现最小生成树之prim(普里姆)算法
- [置顶] 《统计学习方法》 决策树 CART生成算法 回归树 Python实现
- Python使用win32com模块实现数据库表结构自动生成word表格的方法
- python ftp 按目录结构上传下载的实现代码
- python模块win32com 实现数据库表结构自动生成word表格
- 数据结构之---C语言实现最小生成树之prim(普里姆)算法
- 用Python编写生成树状结构的文件目录的脚本的教程