2004年08月24日 星期二 17:36
Hollo limodou: 谢谢!! 回家好好看一看! 今天,研究了一下子 4suite 使用其 4xslt 模块,可以在脚本中进行 XSLT+XML 的解析处理, 哈哈哈!直接使用 XSLT 进行嵌套处理非常的自然,也是XML 标准的处理方式!!! /******** [2004-08-24]17:34:58 ; limodou wrote: limodou> python-chinese,您好! limodou> 我写了一个小的模板类,现在可以实现嵌套处理,但是不支持根据列表数据而实现模板的循环。 limodou> 模板类: limodou> import re limodou> import sets limodou> import copy limodou> re_node = re.compile('%\((\w+)\)s') limodou> class Template: limodou> def __init__(self): limodou> pass limodou> def load(self, tplname): limodou> mod = __import__(tplname) limodou> components = tplname.split('.') limodou> for comp in components[1:]: limodou> mod = getattr(mod, comp) limodou> self.vars = {} limodou> self.nodes = {} limodou> for v in dir(mod): limodou> if v.startswith('__') and v.endswith('__'): limodou> continue limodou> self.vars[v] = getattr(mod, v) limodou> self.nodes[v] = limodou> list(sets.Set(self._get_rely_on_node(self.vars[v]))) limodou> def _get_rely_on_node(self, s): #search for limodou> %(name)s format, make a dict limodou> return re_node.findall(s) limodou> def _get_list(self, path, target): limodou> if not self.vars.has_key(target): limodou> return limodou> if target not in path: limodou> path.append(target) limodou> for i in self.nodes[target]: limodou> self._get_list(path, i) limodou> return limodou> def value(self, target='main', values=None): limodou> path = [] limodou> self._get_list(path, target) limodou> path.reverse() limodou> if not values: limodou> vals = {} limodou> else: limodou> vals = copy.deepcopy(values) limodou> for i in path: limodou> vals[i] = self.vars[i] % vals limodou> return vals[target] limodou> if __name__ == '__main__': limodou> vars = dict(value='aba') limodou> template = Template() limodou> template.load('tmp2') limodou> print template.value('main', vars) limodou> 测试文件: limodou> main=""" limodou> v = [] limodou> %(statement)s limodou> for i in range(10): limodou> %(printvar)s""" limodou> statement = "v.append('%(value)s')\n" limodou> printvar = " print '\\n'.join(%(var)s)\n" limodou> var = 'v' limodou> 有兴趣的可以讨论。 limodou> 现在的问题是对于可循环的模板,比如上面的statement我想根据提供的数据如果为列表或元组时,会自动进行重复。但一个模板可能涉及多个模板变量,如果有多个模板变量为多值该如何处理。按我 limodou> 的想法,这种多值应该组织为一个元组的列表。不过,不太清楚otter会分析出什么数据来。不知道ZoomQuiet对这个有没有兴趣。 limodou> 简单说一下用法: limodou> 我定义的模板其实是一个模块,不过只是用来定义数据的。 limodou> vars = dict(value='aba') #生成模板用到的变量 limodou> template = Template() #生成一个模板对象 limodou> template.load('tmp2') #装入一个模板 limodou> print template.value('main', vars) limodou> #得到最终模板的值 当然,模板中还有许多的子模板,都可以得到。 limodou> 致 limodou> 礼! limodou> limodou limodou> chatme at 263.net limodou> 2004-08-24 ********************************************/ -- Free as in Freedom Zoom.Quiet #=========================================# ]Time is unimportant, only life important![ #=========================================# sender is the Bat!2.12.00
2004年08月24日 星期二 17:51
Pythoner,您好! 我要下载很多mp3 但是mp3的下载地址分布在各个不同的网页上。所以我写了一个python程序用来自动读取这些网页 然后获取其中的mp3地址。但是由于这是个论坛,所以只有登陆了才能获得页面,否则他返回一个出错页面。如何让这个论坛认为我已经登陆了呢? 使用cookie吗?或者使用别的方法?请给个解决方法,最好有段示例代码,谢谢! 致 礼! dreamingk(天成) dreamingker at 163.com 2004-08-24
Zeuux © 2025
京ICP备05028076号