python项目实践Word下载.docx

上传人:b****8 文档编号:22746152 上传时间:2023-02-05 格式:DOCX 页数:26 大小:493.28KB
下载 相关 举报
python项目实践Word下载.docx_第1页
第1页 / 共26页
python项目实践Word下载.docx_第2页
第2页 / 共26页
python项目实践Word下载.docx_第3页
第3页 / 共26页
python项目实践Word下载.docx_第4页
第4页 / 共26页
python项目实践Word下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

python项目实践Word下载.docx

《python项目实践Word下载.docx》由会员分享,可在线阅读,更多相关《python项目实践Word下载.docx(26页珍藏版)》请在冰豆网上搜索。

python项目实践Word下载.docx

html>

head>

title>

、、、<

/title>

/head>

body>

defend_document(self):

/body>

/html>

defstart_paragraph(self):

p>

defend_paragraph(self):

/p>

defstart_heading(self):

h2>

defend_heading(self):

/h2>

defstart_list(self):

ul>

defend_list(self):

/ul>

defstart_listitem(self):

li>

defend_listitem(self):

/li>

defstart_title(self):

h1>

defend_title(self):

/h1>

defsub_emphasis(self,match):

return'

em>

%s<

/em>

%match、group

(1)

defsub_url(self,match):

ahref="

%s"

>

/a>

%(match、group

(1),match、group

(1))

defsub_mail(self,match):

mailto:

deffeed(self,data):

printdata

这个程序堪称就是整个“项目”的基石所在:

提供了标签的输出,以及字符串的替换。

理解起来也比较简单。

再来瞧第二个模块“过滤器”,这个模块更为简单,其实就就是一个正则表达式的字符串。

相关代码如下:

self、addFilter(r'

\*(、+?

)\*'

'

emphasis'

(http:

//[\、a-z0-9A-Z/]+)'

url'

([\、a-zA-Z]+@[\、a-zA-Z]+[a-zA-Z]+)'

'

mail'

这就就是三个过滤器了,分别就是:

强调牌过滤器(用×

号标出的),url牌过滤器,email牌过滤器。

熟悉正则表达式的同学理解起来就是没有压力的。

再来瞧第三个模块“规则”,这个模块,抛开那祖父类不说,其她类应该有的两个方法就是condition与action,前者就是用来判断读进来的字符串就是不就是符合自家规则,后者就是用来执行操作的,所谓的执行操作就就是指调用“处理程序模块”,输出前标签、内容、后标签。

来瞧下这个模块的代码,其实这个里面几个类的关系,画到类图里面瞧会比较清晰。

rules、py:

classRule:

defaction(self,block,handler):

handler、start(self、type)

handler、feed(block)

handler、end(self、type)

returnTrue

classHeadingRule(Rule):

type='

heading'

defcondition(self,block):

returnnot'

\n'

inblockandlen(block)<

=70andnotblock[-1]=='

:

classTitleRule(HeadingRule):

title'

first=True

defcondition(self,block):

ifnotself、first:

returnFalse

self、first=False

returnHeadingRule、condition(self,block)

classListItemRule(Rule):

listitem'

returnblock[0]=='

-'

defaction(self,block,handler):

handler、feed(block[1:

]、strip())

classListRule(ListItemRule):

list'

inside=False

defaction(self,block,handler):

ifnotself、insideandListItemRule、condition(self,block):

self、inside=True

elifself、insideandnotListItemRule、condition(self,block):

self、inside=False

classParagraphRule(Rule):

paragraph'

补充utils、py:

defline(file):

forlineinline

yield'

defblocks(file):

block=[]

forlineinlines(file):

ifline、strip():

block、append(line)

elifblock:

、join(block)、strip()

最后隆重的来瞧下“语法分析器模块”,这个模块的作用其实就就是协调读入的文本与其她模块的关系。

在往重点说就就是,提供了两个存放“规则”与“过滤器”的列表,这么做的好处就就是使得整个程序的灵活性得到了极大的提高,使得规则与过滤器变成的热插拔的方式,当然这个也归功于前面在写规则与过滤器时每一种类型的规则(过滤器)都单独的写成了一个类,而不就是用if、、else来区分。

瞧代码:

importsys,re

fromhandlersimport*

fromutilimport*

fromrulesimport*

classParser:

def__init__(self,handler):

self、handler=handler

self、rules=[]

self、filters=[]

defaddRule(self,rule):

self、rules、append(rule)

defaddFilter(self,pattern,name):

deffilter(block,handler):

returnre、sub(pattern,handler、sub(name),block)

self、filters、append(filter)

defparse(self,file):

self、handler、start('

document'

forblockinblocks(file):

forfilterinself、filters:

block=filter(block,self、handler)

forruleinself、rules:

ifrule、condition(block):

last=rule、action(block,self、handler)

iflast:

break

self、handler、end('

classBasicTextParser(Parser):

Parser、__init__(self,handler)

self、addRule(ListRule())

self、addRule(ListItemRule())

self、addRule(TitleRule())

self、addRule(HeadingRule())

self、addRule(ParagraphRule())

self、addFilter(r'

handler=HTMLRenderer()

parser=BasicTextParser(handler)

parser、parse(sys、stdin)

这个模块里面的处理思路就是,遍历客户端(也就就是程序执行的入口)给插进去的所有的规则与过滤器,来处理读进来的文本。

有一个细节的地方也要说一下,其实就是与前面写的呼应一下,就就是在遍历规则的时候通过调用condition这个东西来判断就是否符合当前规则。

我觉得这个程序很像就是命令行模式,有空可以复习一下该模式,以保持记忆网节点的牢固性。

最后说一下我以为的这个程序的用途,1、用来做代码高亮分析,如果改写成js版的话,可以做一个在线代码编辑器。

2、可以用来学习,供我写博文用。

还有其她的思路,可以留下您的真知灼见。

补充一个类图,很简陋,但就是应该能说明之间的关系。

另外我还就是建议如果瞧代码捋不清关系最好自己画图,自己画图才能熟悉整个结构。

python项目练习二:

画幅好画

作者:

the5fire|标签:

pythonpdf 

python实战 

|发布:

2011-12-183:

35p、m、

这就是《python基础教程》中的第二个项目,关于python操作PDF

涉及到的知识点

∙1、urllib的使用

∙2、reportlab库的使用

这个例子着实很简单,不过我发现在python里面可以直接在数组[]里面写for循环,真就是越用越方便。

下面就是代码:

fromurllibimporturlopen

fromreportlab、graphics、shapesimport*

fromreportlab、graphics、charts、lineplotsimportLinePlot

fromreportlab、graphics、charts、textlabelsimportLabel

fromreportlab、graphicsimportrenderPDF

URL='

COMMENT_CHARS='

#:

drawing=Drawing(400,200)

data=[]

forlineinurlopen(URL)、readlines():

ifnotline、isspace()andnotline[0]inCOMMENT_CHARS:

data、append([float(n)forninline、split()])

pred=[row[2]forrowindata]

high=[row[3]forrowindata]

low=[row[4]forrowindata]

times=[row[0]+row[1]/12、0forrowindata]

lp=LinePlot()

lp、x=50

lp、y=50

lp、height=125

lp、width=300

lp、data=[zip(times,pred),zip(times,high),zip(times,low)]

lp、lines[0]、strokeColor=colors、blue

lp、lines[1]、strokeColor=colors、red

lp、lines[2]、strokeColor=colors、green

drawing、add(lp)

drawing、add(String(250,150,'

Sunspots'

fontSize=14,fillColor=colors、red))

renderPDF、drawTo,'

report3、pdf'

python项目练习三:

万能的XML

2011-12-203:

18p、m、

这个项目的名称与其叫做万能的XML不如叫做自动构建网站,根据一份XML文件,生成对应目录结构的网站,不过只有html还就是太过于简单了,如果要就是可以连带生成css那就比较强大了。

这个有待后续研发,先来研究下怎么html网站结构。

既然就是通过XML结构生成网站,那所有的事情都应该由这个XML文件来。

先来瞧下这个XML文件,website、xml:

website>

<

pagename="

index"

title="

Homepage"

WelcometomyHomepage<

Hi,there、MynameisMr、gumby,andthisismyhomepage,herearesomeofmyint:

interests/shouting、html"

Shouting<

interests/sleeping、html"

Sleeping<

interests/eating、html"

Eating<

/page>

directoryname="

interests"

shouting"

Shouting"

shoutingpage<

、、、、<

sleeping"

Sleeping"

sleepingpage<

eating"

Eating"

Eatingpage<

/directory>

/website>

有了这个文件,下面应该来瞧怎么通过这个文件生成网站。

首先我们要解析这个xml文件,python解析xml与在java中一样,有两种方式,SAX与DOM,两种处理方式不同点在于速度与范围,前者讲究的就是效率,每次只处理文档的一小部分,快速而能有效的利用内存,后者就是相反的处理方式,先把所有的文档载入到内存,然后再进行处理,速度比较慢,也比较消耗内存,唯一的好处就就是可以操作整个文档。

在python中使用sax方式处理xml要先引入xml、sax中的parse函数,还有xml、sax、handler中的ContentHandler,后面的这个类就是要与parse函数来配合使用的。

使用方式如下:

parse('

xxx、xml'

xxxHandler),这里面的xxxHandler要继承上面的ContentHandler,不过只要继承就行,不需要有所作为。

然后这个parse函数在处理xml文件的时候,会调用xxxHandler中的startElement函数与endElement函数来一个xml中的标签的开始与结束,中间的过程使用一个名为characters的函数来处理标签内部的所有字符串。

有了上面的这些认识,我们已经知道如何处理xml文件了,然后再来瞧那个罪恶的源头website、xml文件,分析其结构,只有两个节点:

page与directory,很明显page表示一个页面,directory表示一个目录。

所以处理这个xml文件的思路就变的清晰了。

读取xml文件的每一个节点,然后判断就是page还就是directory如果就是page则创建html页面,然后把节点中的内容写到文件里。

如果遇到directory就创建一个文件夹,然后再处理其内部的page节点(如果存在的话)。

下面来瞧这部分代码,书中的实现比较复杂,比较灵活。

先来瞧,然后在分析。

fromxml、sax、handlerimportContentHandler

fromxml、saximportparse

importos

classDispatcher:

defdispatch(self,prefix,name,attrs=None):

mname=prefix+name、capitalize()

dname='

default'

+prefix、capitalize()

method=getattr(self,mname,None)

args=()

else:

method=getattr(self,dname,None)

args=name,

ifprefix=='

start'

args+=attrs,

method(*args)

defstartElement(self,name,attrs):

self、dispatch('

name,attrs)

defendElement(self,name):

end'

classWebsiteConstructor(Dispatcher,ContentHandler):

passthrough=False

def__init__(self,directory):

self、directory=[directory]

self、ensureDirectory()

defensureDirectory(self):

path=os、path、join(*self、directory)

printpath

print'

----'

ifnotos、path、isdir(path):

os、makedirs(path)

defcharacters(self,chars):

ifself、passthrough:

self、out、write(chars)

defdefaultStart(self,name,attrs):

self、out、write('

+name)

forkey,valinattrs、items():

%s="

%(key,val))

defdefaultEnd(self,name):

/%s>

%name)

defstartDirectory(self,attrs):

self、directory、append(attrs['

name'

])

defendDirectory(self):

endDirectory'

self、directory、pop()

defstartPage(self,attrs):

startPage'

=os、path、join(*self、directory+[attrs['

]+'

、html'

self、out=open(,'

w'

self、writeHeader(attrs['

self、passthrough=True

defendPage(self):

endPage'

self、passthrough=False

self、writeFooter()

self、out、close()

defwriteHeader(self,title):

\n<

\

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1