一、itertools模块:
#提供迭代函数,返回的都是可迭代对象(运行时才生成计算),惰性计算(访问时才真正计算)
count(start=0,step=1); #
cycle(iterable); #循环迭代对象无限次
repeat(object,times=None); #重复对象times次,默认是无限重复
combinations(iterable,r); #返回 长度为r 的全部排列
#都会生成无限序列对象,然后用for-in循环
takewhile(predicate,iterable) #从无限序列iterable中把满足predicate函数条件 的取出来
chain(*iterables) #把一组序列按顺序串联起来,形成更大的可迭代序列
groupby(iterable,keyfunc=null)) #把序列中关键字(keyfunc判断)相同的分组,形成{key:values}
imap(func,*iterables) #返回可迭代对象,imap可作用于无限序列(以短的序列为准),map返回list(调用时已计算),
ifilter(function or None ,sequence) #filter惰性实现
二、collections模块
#namedtuple(typename, field_names, verbose=False, rename=False)
Name = namedtuple("name",tuple); #用Name代替这个tuple使用
deq = collections.deque(iterable[,maxlen]);
deq.append(ele)
deq.pop()
deq.appendleft()
deq.popleft()
#defaultdict默认字典:若key不存在,普通dict抛异常,而defaultdict返回指定函数的的返回值
dd = defaultdict(default_factory);
#OrderedDict #按照key插入顺序排列
xml
解析xml
dom和sax:dom会全部读入内存解析为树,sax边读边解析,
#处理函数:
#StartElementHandler(name,attrs)
#EndElementHandler(name)
#CharacterDataHandler(text)
from xml.parsers.expat import ParserCreate
p = ParserCreate();
p.StartElementHandler ##读节点的开始 处理函数
p.EndElementHandler #读节点结束时,处理函数
p.CharacterDataHandler #读节点数据时,处理调用
#html是xml子集,但html格式不标准(比如可能没有结束标签),解析html用HTMLParser模块,实现相应处理函数:
handle_starttag(name,attrs) #节点开始时:调用
handle_endtag(name) #节点结束时: 调用
handle_data(data) #节点内容: 调用
handle_startendtag #开始结束标签:(<br\>)
handle_comment(data) #注释标签: 调用
handle_charref(name) #两种特殊字符:{:
handle_entityref(name) #&xxx: