作为一门编程语言,python实在是太方便了。
最近,用ElementTree函数库实现了一个目录树结构,算是初识python。今天准备在实现好的代码中添加一个打印目录树结构的函数,不停地纠结如何判断叶子节点,ElementTree.Element类中没有提供对应方法。尝试使用ElementTree.Element类中的iter()函数,发现iter()迭代不会区分子节点层次。还看了同学的代码,结果发现他是利用element节点上他自己设置的标志位来判断叶子节点。凡事往简单处考虑,试着写了几行,居然就解决了。代码如下:
1 def print_element_tree(self,xnode,level=0): 2 print level*" "+"|__"+xnode.tag 3 for i in xnode: 4 level=self.print_element_tree(i,level+4) 5 return level-4
总共4行代码。根本不需要自己判断子节点,python已经封装好,for循环中会自动判断,功能太强大了。
下面,对我写这个目录树时,所用到的一些函数库做一个简单的总结:
- ElementTree(cElementTree)函数库
Element类型是一种灵活的容器对象,用于在内存中存储结构化数据。也可以用来处理XML文件,将xml文件读入内存,维持树结构。具体内容:http://docs.python.org/2/library/xml.etree.elementtree.html
- Pickle(cPickle)函数库
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle.dump(obj, file[, protocol])
序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。
pickle.load(file)
反序列化对象。将文件中的数据解析为一个Python对象。
我们也可以直接获取序列化后的数据流,或者直接从数据流反序列化。方法dumps与loads就完成这样的功能。dumps返回序列化后的数据流,loads返回的序列化生成的对象。我主要使用的就是这两个函数。
- time函数库
python获取日期和时间所用的模块。
time()函数,返回时间戳。时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,单位为秒。
time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
>>> time.localtime(1304575584.1361799)
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=14, tm_min=6, tm_sec=24, tm_wday=3, tm_yday=125, tm_isdst=0)
time.strftime('%Y-%m-%d',time.localtime(time.time())),格式化输出时间。
下面是time.strftime的参数:
strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
这里仅对我使用的一些模块中函数做了简单备忘,这些模块的功能很多,后续使用可继续挖掘。
目录树写完了,但仅仅是实现了简单的功能,没有发挥python简洁特性,没有用好ElementTree中类方法,代码冗长。根本没有使用python异常机制,还是在用print语句输出错误信息。至于lambda、函数修饰符等,更不谈。任重道远,继续努力。