⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listing22-3.py

📁 《Beginning Python--From Novice to Professional》 的源码
💻 PY
字号:
from xml.sax.handler import ContentHandlerfrom xml.sax import parseimport osclass Dispatcher:    def dispatch(self, prefix, name, attrs=None):        mname = prefix + name.capitalize()        dname = 'default' + prefix.capitalize()        method = getattr(self, mname, None)        if callable(method): args = ()        else:            method = getattr(self, dname, None)            args = name,        if prefix == 'start': args += attrs,        if callable(method): method(*args)    def startElement(self, name, attrs):        self.dispatch('start', name, attrs)    def endElement(self, name):        self.dispatch('end', name)class WebsiteConstructor(Dispatcher, ContentHandler):    passthrough = False    def __init__(self, directory):        self.directory = [directory]        self.ensureDirectory()    def ensureDirectory(self):        path = os.path.join(*self.directory)        if not os.path.isdir(path): os.makedirs(path)    def characters(self, chars):        if self.passthrough: self.out.write(chars)    def defaultStart(self, name, attrs):        if self.passthrough:            self.out.write('<' + name)            for key, val in attrs.items():                self.out.write(' %s="%s"' % (key, val))            self.out.write('>')    def defaultEnd(self, name):        if self.passthrough:            self.out.write('</%s>' % name)    def startDirectory(self, attrs):        self.directory.append(attrs['name'])        self.ensureDirectory()    def endDirectory(self):        self.directory.pop()    def startPage(self, attrs):        filename = os.path.join(*self.directory+[attrs['name']+'.html'])        self.out = open(filename, 'w')        self.writeHeader(attrs['title'])        self.passthrough = True    def endPage(self):        self.passthrough = False        self.writeFooter()        self.out.close()    def writeHeader(self, title):        self.out.write('<html>\n  <head>\n    <title>')        self.out.write(title)        self.out.write('</title>\n  </head>\n  <body>\n')    def writeFooter(self):        self.out.write('\n  </body>\n</html>\n')parse('website.xml', WebsiteConstructor('public_html'))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -