




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
可愛的python習(xí)題答案
status校對(duì)lizzie完成度100%CDays-5計(jì)算今年是閏年嘛?判斷閏年條件,滿足年份模400為0,或者模4為0但模100不為0.源代碼Togglelinenumbers1#coding:utf-82'''cdays-5-exercise-1.py判斷今年是否是閏年3@note:使用了import,time模塊,邏輯分支,字串格式化等4'''56importtime#導(dǎo)入time模塊7thisyear=time.localtime()[0]#獲取當(dāng)前年份8ifthisyear%400==0orthisyear%4==0andthisyear%100<>0:#判斷閏年條件,滿足模400為0,或者模4為0但模100不為09print'thisyear%sisaleapyear'%thisyear10else:11print'thisyear%sisnotaleapyear'%thisyear12運(yùn)行截屏利用python作為科學(xué)計(jì)算器。熟悉Python中的常用運(yùn)算符,并分別求出表達(dá)式12*34+78-132/6、(12*(34+78)-132)/6、(86/40)**5的值。并利用math模塊進(jìn)行數(shù)學(xué)計(jì)算,分別求出145/23的余數(shù),0.5的sin和cos值(注意sin和cos中參數(shù)是弧度制表示)提醒:可通過importmath;help("math")查看math幫助.源代碼Togglelinenumbers1#coding:utf-82'''cdays-5-exercise-2.py求表達(dá)式的值3@note:基本表達(dá)式運(yùn)算,格式化輸出,math模塊4@see:math模塊使用可參考/lib/module-math.html5'''67x=12*34+78-132/6#表達(dá)式計(jì)算8y=(12*(34+78)-132)/69z=(86/40)**51011print'12*34+78-132/6=%d'%x12print'(12*(34+78)-132)/6=%d'%y13print'(86/40)**5=%f'%z1415importmath#導(dǎo)入數(shù)學(xué)計(jì)算模塊1617a=math.fmod(145,23)#求余函式18b=math.sin(0.5)#正弦函式19c=math.cos(0.5)#余弦函式2021print'145/23的余數(shù)=%d'%a22print'sin(0.5)=%f'%b23print'cos(0.5)=%f'%c24'b':以二進(jìn)制方式打開。打開一個(gè)二進(jìn)制文件必須用該模式。增加'b'模式是用來兼容系統(tǒng)對(duì)當(dāng)二進(jìn)制和文本文件的處理不同'r+','w+'和'a+'以更新方式打開文件(注意'w+'覆蓋文件)嘗試for..in..循環(huán)可以對(duì)哪些數(shù)據(jù)類型進(jìn)行操作?for..in循環(huán)對(duì)于任何序列(列表,元組,字符串)都適用。但從廣義說來可以使用任何種類的由任何對(duì)象組成的序列格式化聲明,還有哪些格式可以進(jìn)行約定?格式化申明詳細(xì):/lib/typesseq-strings.html(精巧地址:http://bit.ly/2TH7cF)dSignedintegerdecimal.iSignedintegerdecimal.oUnsignedoctal.uUnsigneddecimal.xUnsignedhexadecimal(lowercase).XUnsignedhexadecimal(uppercase).eFloatingpointexponentialformat(lowercase).EFloatingpointexponentialformat(uppercase).fFloatingpointdecimalformat.FFloatingpointdecimalformat.gFloatingpointformat.Usesexponentialformatifexponentisgreaterthan-4orlessthanprecision,decimalformatotherwise.GFloatingpointformat.Usesexponentialformatifexponentisgreaterthan-4orlessthanprecision,decimalformatotherwise.cSinglecharacter(acceptsintegerorsinglecharacterstring).rString(convertsanypythonobjectusingrepr()).sString(convertsanypythonobjectusingstr()).%Noargumentisconverted,resultsina"%"characterintheresult.現(xiàn)在的寫入文件模式好嘛?有改進(jìn)的余地?CDay-4-5.py好在哪里?Togglelinenumbers1#coding:utf-823importos45export=""6forroot,dirs,filesinos.walk('/media/cdrom0'):7export+="\n%s;%s;%s"%(root,dirs,files)8open('mycd2.cdc','w').write(export)9CDay-4-6.py又更加好在哪里?Togglelinenumbers1#coding:utf-823importos45export=[]6forroot,dirs,filesinos.walk('/media/cdrom0'):7export.append("\n%s;%s;%s"%(root,dirs,files))8open('mycd2.cdc','w').write(''.join(export))9CDay-4-5.py中使用了字符串的+連接,而CDay-4-6.py中是利用join。字符串的join要比+操作效率高。因?yàn)閷?duì)象的反復(fù)+,比一次性內(nèi)建處理,要浪費(fèi)更多的資源。讀取文件cdays-4-test.txt內(nèi)容,去除空行和注釋行后,以行為單位進(jìn)行排序,并將結(jié)果輸出為cdays-4-result.txt。cdays-4-test.txt#somewordsSometimesinlife,Youfindaspecialfriend;Someonewhochangesyourlifejustbybeingpartofit.Someonewhomakesyoulaughuntilyoucan'tstop;Someonewhomakesyoubelievethattherereallyisgoodintheworld.Someonewhoconvincesyouthattherereallyisanunlockeddoorjustwaitingforyoutoopenit.ThisisForeverFriendship.whenyou'redown,andtheworldseemsdarkandempty,Yourforeverfriendliftsyouupinspiritsandmakesthatdarkandemptyworldsuddenlyseembrightandfull.Yourforeverfriendgetsyouthroughthehardtimes,thesadtimes,andtheconfusedtimes.Ifyouturnandwalkaway,Yourforeverfriendfollows,Ifyouloseyouway,Yourforeverfriendguidesyouandcheersyouon.Yourforeverfriendholdsyourhandandtellsyouthateverythingisgoingtobeokay.源代碼Togglelinenumbers1#coding:utf-82'''cdays-4-exercise-6.py文件基本操作3@note:文件讀取寫入,列表排序,字符串操作4@see:字符串各方法可參考hekp(str)或Python在線文檔/lib/string-methods.html5'''67f=open('cdays-4-test.txt','r')#以讀方式打開文件8result=list()9forlineinf.readlines():#依次讀取每行10line=line.strip()#去掉每行頭尾空白11ifnotlen(line)orline.startswith('#'):#判斷是否是空行或注釋行12continue#是的話,跳過不處理13result.append(line)#保存14result.sort()#排序結(jié)果15printresult16open('cdays-4-result.txt','w').write('%s'%'\n'.join(result))#保存入結(jié)果文件17運(yùn)行截屏CDays-3根據(jù)DiPy10.6.處理命令行參數(shù)(/diveintopython/scripts_and_streams/command_line_arguments.html精巧地址:http://bit.ly/1x5gMw)使用getopt.getopt()優(yōu)化當(dāng)前功能函式。源代碼Togglelinenumbers1#coding=utf-82'''LovelyPython-3PyDay3PyCDCv0.34@see:/diveintopython/scripts_and_streams/command_line_arguments.html5'''6importos,sys7importgetopt#導(dǎo)入getopt模塊89CDROM='/media/cdrom0'10defcdWalker(cdrom,cdcfile):11export=""12forroot,dirs,filesinos.walk(cdrom):13export+="\n%s;%s;%s"%(root,dirs,files)14open(cdcfile,'w').write(export)1516defusage():17print'''PyCDC使用方式:18pythoncdays-3-exercise-1.py-dcdc-k中國(guó)火19#搜索cdc目錄中的光盤信息,尋找有“中國(guó)火”字樣的文件或是目錄,在哪張光盤中20'''21try:22opts,args=getopt.getopt(sys.argv[1:],'hd:e:k:')23exceptgetopt.GetoptError:24usage()25sys.exit()2627iflen(opts)==0:28usage()29sys.exit()3031c_path=''32foropt,arginopts:33ifoptin('-h','--help'):34usage()35sys.exit()36elifopt=='-e':37#判別sys.argv[2]中是否有目錄,以便進(jìn)行自動(dòng)創(chuàng)建38#cdWalker(CDROM,arg)39print"記錄光盤信息到%s"%arg40elifopt=='-d':41c_path=arg42elifopt=='-k':43ifnotc_path:44usage()45sys.exit()46#進(jìn)行文件搜索47讀取某一簡(jiǎn)單索引文件cdays-3-test.txt,其每行格式為文檔序號(hào)關(guān)鍵詞,現(xiàn)需根據(jù)這些信息轉(zhuǎn)化為倒排索引,即統(tǒng)計(jì)關(guān)鍵詞在哪些文檔中,格式如下:包含該關(guān)鍵詞的文檔數(shù)關(guān)鍵詞=>文檔序號(hào)。其中,原索引文件作為命令行參數(shù)傳入主程序,并設(shè)計(jì)一個(gè)collect函式統(tǒng)計(jì)"關(guān)鍵字<->序號(hào)"結(jié)果對(duì),最后在主程序中輸出結(jié)果至屏幕。cdays-3-test.txt內(nèi)容:1key12key23key17key38key210key114key219key420key130key3源代碼Togglelinenumbers1#coding:utf-82'''cdays-3-exercise-2.py字典的使用3@not:使用sys.args,字典操作,函式調(diào)用4@see:sys模塊參見help(sys)5'''67importsys#導(dǎo)入sys模塊89defcollect(file):10'''改變key-value對(duì)為value-key對(duì)11@paramfile:文件對(duì)象12@return:一個(gè)dict包含value-key對(duì)13'''14result={}15forlineinfile.readlines():#依次讀取每行16left,right=line.split()#將一行以空格分割為左右兩部分17ifresult.has_key(right):#判斷是否已經(jīng)含有right值對(duì)應(yīng)的key18result[right].append(left)#若有,直接添加到result[right]的值列表19else:20result[right]=[left]#沒有,則新建result[right]的值列表21returnresult2223if__name__=="__main__":24iflen(sys.argv)==1:#判斷參數(shù)個(gè)數(shù)25print'usage:\n\tpythoncdays-3-exercise-2.pycdays-3-test.txt'26else:27result=collect(open(sys.argv[1],'r'))#調(diào)用collect函式,返回結(jié)果28for(right,lefts)inresult.items():#輸出結(jié)果29print"%d'%s'\t=>\t%s"%(len(lefts),right,lefts)30運(yùn)行截屏八皇后問題。在8*8的棋盤上,放置8個(gè)皇后,使得任兩個(gè)皇后不在同行同列同正負(fù)對(duì)角線上。源代碼Togglelinenumbers1#coding:utf-82'''cdays-3-exercise-3.py3@note:使用全局變量和函式的遞歸調(diào)用4'''56globalcol#定義一些全局變量7globalrow8globalpos_diag9globalnag_diag10globalcount1112defoutput():13'''輸出一種有效結(jié)果14'''15globalcount16printrow17count+=11819defdo_queen(i):20'''生成所有正確解21@parami:皇后的數(shù)目22'''23forjinrange(0,8):#依次嘗試0~7位置24ifcol[j]==1andpos_diag[i-j+7]==1andnag_diag[i+j]==1:#若該行,正對(duì)角線,負(fù)對(duì)角線上都沒有皇后,則放入i皇后25row[i]=j26col[j]=0#調(diào)整各個(gè)列表狀態(tài)27pos_diag[i-j+7]=028nag_diag[i+j]=029ifi<7:30do_queen(i+1)#可遞增或遞減31else:32output()#產(chǎn)生一個(gè)結(jié)果,輸出33col[j]=1#恢復(fù)各個(gè)列表狀態(tài)為之前的34pos_diag[i-j+7]=135nag_diag[i+j]=13637if__name__=='__main__':38col=[]#矩陣列的列表,存儲(chǔ)皇后所在列,若該列沒有皇后,則相應(yīng)置為1,反之則039row=[]#矩陣行的列表,存放每行皇后所在的列位置,隨著程序的執(zhí)行,在不斷的變化中,之間輸出結(jié)果40pos_diag=[]#正對(duì)角線,i-j恒定,-7~0~7,并且b(i)+7統(tǒng)一到0~1441nag_diag=[]#負(fù)對(duì)角線,i+j恒定,0~1442count=043forindexinrange(0,8):#一些初始化工作44col.append(1)45row.append(0)46forindexinrange(0,15):47pos_diag.append(1)48nag_diag.append(1)49do_queen(0)#開始遞歸,先放一個(gè),依次遞增,反過來,從7開始遞減也可50print'Totallyhave%dsolutions!'%count51運(yùn)行截屏CDays-2在文中g(shù)rep實(shí)現(xiàn)例子中,沒有考慮子目錄的處理,因?yàn)槿绻苯觨pen目錄進(jìn)行讀操作會(huì)出現(xiàn)錯(cuò)誤,所以要求讀者修改這個(gè)示例代碼以便考慮到子目錄這種特殊情況,然后把最后探索出的cdcGrep()嵌入pycdc-v0.5.py實(shí)現(xiàn)完成版本的PyCDC。提示:子目錄處理,可以先判斷,如果是子目錄,就可以遞歸調(diào)用cdcGrep()函式。cdcGrep()函式的修改可以是Togglelinenumbers1defcdcGrep(cdcpath,keyword):2'''光盤信息文本關(guān)鍵詞搜索函式3@note:使用最簡(jiǎn)單的內(nèi)置字串匹配處理來判定是否有關(guān)鍵詞包含4@paramcdcpath:包含*.cdc文件的目錄5@paramkeyword:搜索的關(guān)鍵詞6@return:組織匹配好的信息到字典中導(dǎo)出成searched.dump文件7@todo:可結(jié)合搜索引擎進(jìn)行模糊搜索!8'''9expDict={}10filelist=os.listdir(cdcpath)#搜索目錄中的文件11cdcpath=cdcpath+"/"12forcdcinfilelist:#循環(huán)文件列表13ifos.path.isdir(cdcpath+cdc):14cdcGrep(cdcpath+cdc,keyword)#若是子目錄,則遞歸調(diào)用完成查找15else:16cdcfile=open(cdcpath+cdc)#拼合文件路徑,并打開文件17forlineincdcfile.readlines():#讀取文件每一行,并循環(huán)18ifkeywordinline:#判定是否有關(guān)鍵詞在行中19#printline#打印輸出20expDict[cdc].append(line)21#printexpDict22pickle.dump(expDict,open("searched.dump","w"))23源代碼Togglelinenumbers1#coding=utf-82'''pycdc-v0.5.py3LovelyPython-2PyDay4@note:將cdcGrep()嵌入,實(shí)現(xiàn)完成版本的PyCDC5'''6importsys,cmd7fromcdctoolsimport*8classPyCDC(cmd.Cmd):9def__init__(self):10cmd.Cmd.__init__(self)#initializethebaseclass11self.CDROM='/media/cdrom0'12self.CDDIR='cdc/'13mpt="(PyCDC)>"14ro='''PyCDC0.5使用說明:15dir目錄名#指定保存和搜索目錄,默認(rèn)是"cdc"16walk文件名#指定光盤信息文件名,使用"*.cdc"17find關(guān)鍵詞#遍歷搜索目錄中所有.cdc文件,輸出含有關(guān)鍵詞的行18?#查詢19EOF#退出系統(tǒng),也可以使用Crtl+D(Unix)|Ctrl+Z(Dos/Windows)20'''2122defhelp_EOF(self):23print"退出程序Quitstheprogram"24defdo_EOF(self,line):25sys.exit()2627defhelp_walk(self):28print"掃描光盤內(nèi)容walkcdandexportinto*.cdc"29defdo_walk(self,filename):30iffilename=="":filename=raw_input("輸入cdc文件名::")31print"掃描光盤內(nèi)容保存到:'%s'"%filename32cdWalker(self.CDROM,self.CDDIR+filename)3334defhelp_dir(self):35print"指定保存/搜索目錄"36defdo_dir(self,pathname):37ifpathname=="":pathname=raw_input("輸入指定保存/搜索目錄:")38self.CDDIR=pathname39print"指定保存/搜索目錄:'%s';默認(rèn)是:'%s'"%(pathname,self.CDDIR)4041defhelp_find(self):42print"搜索關(guān)鍵詞"43defdo_find(self,keyword):44ifkeyword=="":keyword=raw_input("輸入搜索關(guān)鍵字:")45print"搜索關(guān)鍵詞:'%s'"%keyword46cdcGrep(self.CDDIR,keyword)4748if__name__=='__main__':#thiswaythemodulecanbe49cdc=PyCDC()#importedbyotherprogramsaswell50cdc.cmdloop()51編寫一個(gè)類,實(shí)現(xiàn)簡(jiǎn)單的棧。數(shù)據(jù)的操作按照先進(jìn)后出(FILO)的順序。主要成員函式為put(item),實(shí)現(xiàn)數(shù)據(jù)item插入棧中;get(),實(shí)現(xiàn)從棧中取一個(gè)數(shù)據(jù)。源代碼Togglelinenumbers1#coding:utf-82'''cdays-2-exercise-2.py自定義棧3@note:類和對(duì)象的使用4'''56classMyStack(object):7'''MyStack8自定義棧,主要操作有put(),get()andisEmpty()9'''10def__init__(self,max):11'''12初始棧頭指針和清空棧13@parammax:指定棧的最大長(zhǎng)度14'''15self.head=-116self.stack=list()17self.max=max18foriinrange(self.max):19self.stack.append(0)2021defput(self,item):22'''23將item壓入棧中24@paramitem:所要入棧的項(xiàng)25'''26ifself.head>=self.max:#判斷當(dāng)前棧是否滿了27return'PutError:TheStackisOverflow!'#提示棧溢出28else:29self.head+=1#不滿,則將item入棧,調(diào)整棧頂指針30self.stack[self.head]=item31print'Put%sSuccess'%item3233defget(self):34'''35獲得當(dāng)前棧頂item36@return:棧頂item37'''38ifself.head<0:#判斷當(dāng)前棧是否為空39return'GetError:TheStackisEmpty!'#提示???0else:41self.head-=1#出棧,返回棧頂元素,并調(diào)整棧頂指針42returnself.stack[self.head+1]4344defisEmpty(self):45'''46獲得當(dāng)前棧的狀態(tài),空或者非空47@return:True(???orFalse(棧非空)48'''49ifself.head<-1:50returnTrue51returnFalse5253if__name__=="__main__":54mystack=MyStack(100)55mystack.put('a')56mystack.put('b')57printmystack.get()58mystack.put('c')59printmystack.get()60printmystack.get()61printmystack.get()62運(yùn)行截屏CDays-1自動(dòng)判定你自個(gè)兒/或是朋友的Blog是什么編碼的?源代碼Togglelinenumbers1#coding:utf-82'''cdays-1-exercise-1.py3@author:U{shengyan<mailto:shengyan1985@>}4@version:$Id$5@note:使用chardet和urllib26@see:chardet使用文檔:/docs/,urllib2使用參考:/lib/module-urllib2.html7'''89importsys10importurllib211importchardet1213defblog_detect(blogurl):14'''15檢測(cè)blog的編碼方式16@paramblogurl:要檢測(cè)blog的url17'''18try:19fp=urllib2.urlopen(blogurl)#嘗試打開給定url20exceptException,e:#若產(chǎn)生異常,則給出相關(guān)提示并返回21printe22print'downloadexception%s'%blogurl23return024blog=fp.read()#讀取內(nèi)容25codedetect=chardet.detect(blog)["encoding"]#檢測(cè)得到編碼方式26print'%s\t<-\t%s'%(blogurl,codedetect)27fp.close()#關(guān)閉28return12930if__name__=="__main__":31iflen(sys.argv)==1:32print'usage:\n\tpythoncdays-1-exercise-1.py'33else:34blog_detect(sys.argv[1])35運(yùn)行截屏如果是非utf-8的,編寫小程序自動(dòng)將指定文章轉(zhuǎn)換成utf-8編碼保存?源代碼Togglelinenumbers1#coding:utf-82'''cdays-1-exercise-2.py熟悉chardet和urllib23@author:U{shengyan<mailto:shengyan1985@>}4@version:$Id$5@note:使用chardet和urllib26@see:chardet使用文檔:/docs/,urllib2使用參考:/lib/module-urllib2.html7'''8importsys9importurllib210importchardet1112defblog_detect(blogurl):13'''14檢測(cè)blog的編碼方式15@paramblogurl:要檢測(cè)blog的url16'''17try:18fp=urllib2.urlopen(blogurl)#嘗試打開給定url19exceptException,e:#若產(chǎn)生異常,則給出相關(guān)提示并返回20printe21print'downloadexception%s'%blogurl22return023blog=fp.read()#讀取內(nèi)容24fp.close()#關(guān)閉25codedetect=chardet.detect(blog)["encoding"]#檢測(cè)得到編碼方式26ifcodedetect<>'utf-8':#是否是utf-827try:28blog=unicode(blog,codedetect)#不是的話,則嘗試轉(zhuǎn)換29#printblog30blog=blog.encode('utf-8')31except:32printu"badunicodeencodetry!"33return034filename='%s_utf-8'%blogurl[7:]#保存入文件35filename=filename.replace('/','_')36open(filename,'w').write('%s'%blog)37print'savetofile%s'%filename38return13940if__name__=="__main__":41iflen(sys.argv)==1:42print'usage:\n\tpythoncdays-1-exercise-2.py'43else:44blog_detect(sys.argv[1])45運(yùn)行截屏CDays0請(qǐng)根據(jù)軟件發(fā)布的流程和軟件開發(fā)的編碼規(guī)范,將讀者之前章節(jié)寫的程序修改并發(fā)布出去。另外,可以查找下除了epydoc外還有哪些較好的py文檔生成器?步驟:編寫epydoc的配置文件如cdays0-epydoc.cfg。[epydoc]#Epydocsectionmarker(requiredbyConfigParser)#Informationaboutthe:MyStackurl:/moin/ObpLovelyPython#Thelistofmodulestodocument.Modulescanbenamedusing#dottednames,modulefilenames,orpackagedirectorynames.#Thisoptionmayberepeated.modules:./cdays0-exercise-1.py#Writehtmloutputtothedirectory"apidocs"output:htmltarget:apidocs/#Includeallautomaticallygeneratedgraphs.Thesegraphsare#generatedusingGraphvizdot.graph:alldotpath:/usr/bin/dot在終端中輸入epydoc--configcdays0-epydoc.cfg,即可生成文檔。運(yùn)行截屏CDays1編程實(shí)現(xiàn)以下功能并進(jìn)行最大化的優(yōu)化:遍歷指定目錄下的所有文件,找出其中占用空間最大的前3個(gè)文件。源代碼Togglelinenumbers1#coding:utf-82'''cdays+1-exercise-1.py3@note:使用os.stat獲取相關(guān)信息,os.walk遍歷,4@see:help(os)5@author:U{shengyan<mailto:shengyan1985@>}6@version:$Id$7'''8importsys9importos1011defget_top_three(path):12'''獲取給定路徑中文件大小最大的三個(gè)13@parampath:指定路徑14@return返回一個(gè)list,每項(xiàng)為(size,filename)15'''16all_file={}17forroot,dirs,filesinos.walk(path):#遍歷path18foronefileinfiles:19fname=os.path.join(root,onefile)#獲得當(dāng)前處理文件的完整名字20fsize=os.stat(fname).st_size#獲得當(dāng)前處理文件大小21ifall_file.has_key(fsize):#按照文件大小存儲(chǔ)22all_file[fsize].append(fname)23else:24all_file[fsize]=[fname]25fsize_key=all_file.keys()#得到所有的文件大小26fsize_key.sort()#排序,從小到大27result=[]28foriin[-1,-2,-3]:#依次取最大的三個(gè)29forjinall_file[fsize_key[i]]:#保存30result.append((fsize_key[i],j))31returnresult[:3]#返回前三個(gè)3233if__name__=="__main__":34iflen(sys.argv)==1:35print'usage:\n\tpythoncdays+1-exercise-1.pypath'36else:37abs_path=os.path.abspath(sys.argv[1])#得到絕對(duì)路徑38ifnotos.path.isdir(abs_path):#判斷所給的路徑是否存在39print'%sisnotexist'%abs_path40else:41top=get_top_three(abs_path)42for(s,f)intop:43print'%s\t->\t%s'%(f,s)44運(yùn)行截屏利用ConfigParser,將上述題目中產(chǎn)生的結(jié)果按照cdays+1-my.ini格式存儲(chǔ)到文件cdays+1-result.txt中。cdays+1-my.ini內(nèi)容為:[Number]filesize=somefilesizefilename=somefilename源代碼Togglelinenumbers1#coding:utf-82'''cdays+1-exercise-2.py3@note:利用ConfigParser解析ini格式4@see:文檔參見/2.4.1/ConfigParser.html,其他例子/librarybook/configparser-example-1.py5@author:U{shengyan<mailto:shengyan1985@>}6@version:$Id$7'''8importos9importsys10fromConfigParserimportRawConfigParser1112definiTT(size_file):13'''按照.ini的格式,存儲(chǔ)size_file14'''15cfg=RawConfigParser()16printsize_file17index=118for(s,f)insize_file:19cfg.add_section("%d"%index)#增加一個(gè)section20cfg.set("%d"%index,'Filename',f)#在該section設(shè)置Filename及其值21cfg.set("%d"%index,'FileSize',s)#在該section設(shè)置FileSize及其值22index+=12324cfg.write(open('cdays+1-result.txt',"w"))2526defgtt(path):27'''獲取給定路徑中文件大小最大的三個(gè)28@parampath:指定路徑29@return返回一個(gè)list,每項(xiàng)為(size,filename)30'''31all_file={}32forroot,dirs,filesinos.walk(path):#遍歷path33foronefileinfiles:34fname=os.path.join(root,onefile)#獲得當(dāng)前處理文件的完整名字35fsize=os.stat(fname).st_size#獲得當(dāng)前處理文件大小36ifall_file.has_key(fsize):#按照文件大小存儲(chǔ)37all_file[fsize].append(fname)38else:39all_file[fsize]=[fname]40fsize_key=all_file.keys()#得到所有的文件大小41fsize_key.sort()#排序,從小到大42result=[]43foriin[-1,-2,-3]:#依次取最大的三個(gè)44forjinall_file[fsize_key[i]]:#保存45result.append((fsize_key[i],j))46returnresult[:3]#返回前三個(gè)4748if__name__=="__main__":49iflen(sys.argv)==1:50print'usage:\n\tpythoncdays+1-exercise-2.pypath'51else:52abs_path=os.path.abspath(sys.argv[1])53ifnotos.path.isdir(abs_path):54print'%sisnotexist'%abs_path55else:56#fromcdays+1-exercise-1importget_top_threeasgtt57iniTT(gtt(abs_path))58運(yùn)行結(jié)果CDays2如果在Karrigell實(shí)例中,不復(fù)制cdctools.py到webapps目錄中,也可以令index.ks引用到?不復(fù)制cdctools.py到webapp目錄中,也可以令index.ks引用到,可以通過以下方式:修改Python的環(huán)境變量PYTHONPATH,把cdctools.py的所在目錄路徑加入在程序里動(dòng)態(tài)的修改sys.pathTogglelinenumbers1#-*-coding:utf-8-*-23importsys45#cdctools.py的路徑添加到sys.path6sys.path.append('/home/shengyan/workspace/obp/CDays/cdays2/')7fromcdctoolsimport*8.......9經(jīng)過本章Karrigell的初步學(xué)習(xí),實(shí)現(xiàn)一個(gè)簡(jiǎn)易的web留言系統(tǒng)。主要利用Karrigell_QuickForm實(shí)現(xiàn)提交留言并顯示出來。步驟:下載karrigell,解壓后,根據(jù)默認(rèn)設(shè)置直接就可以運(yùn)行了,但一般修改conf/下Karrigell.ini中的port=8081,表示使用端口8081,保存將msg拷貝至webapps/,并在index.pih中增加鏈接<ahref='msg/'>Message</a>編輯msg中的index.ks,完成所需功能Togglelinenumbers1#-*-coding:utf-8-*-23importos,sys4importpickle#神奇的序列化模塊5fromHTMLTagsimport*#Karrigell提供頁(yè)面輸出支持模塊6fromKarrigell_QuickFormimportKarrigell_QuickFormasKQF78def_htmhead(title):9'''默認(rèn)頁(yè)面頭聲明10@note:為了復(fù)用,特別的組織成獨(dú)立函式,根據(jù)Karrigell非頁(yè)面訪問約定,函式名稱前加"_"11@paramtitle:頁(yè)面標(biāo)題信息12@return:標(biāo)準(zhǔn)的HTML代碼13'''14htm="""<html><HEAD>15<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>16<title>%s</title></HEAD>17<body>"""%title18returnhtm19##默認(rèn)頁(yè)面尾聲明20htmfoot="""21<h5>designby:<ahref="mailto:shengyan1985@">lizzie</a>22poweredby:<ahref="">Python</a>+23<ahref="">KARRIGELL2.4.0</a>24</h5>25</body></html>"""2627defindex(**args):28'''默認(rèn)主29@note:使用簡(jiǎn)單的表單/鏈接操作來完成原有功能的界面化30@paramargs:數(shù)組化的不定參數(shù)31@return:標(biāo)準(zhǔn)的HTML頁(yè)面32'''33print_htmhead("LeaveMessages")34p=KQF('fm_message','POST',"index","Message")35p.addHtmNode('text','yname','Name',{'size':20,'maxlength':20})36p.addTextArea('Words','10','90')37p.addGroup(["submit","btn_submit","Submit","btn"])38p.display()3940if0==len(QUERY):41pass42else:43if"Submit"inQUERY['btn_submit']:44yname=QUERY['yname']45ywords=QUERY['Words']46if0==len(ywords):47printH3("pleasesaysomething!")48else:49if0==len(yname):50yname='somebody'51try:52msg=pickle.load(open("message.dump"))53except:54msg=[]55msg.append((yname,ywords))56index=len(msg)-157whileindex>=0:58printH5(msg[index][0]+'says:')59printP('------'+msg[index][1])60index-=161pickle.dump(msg,open("message.dump","w"))62else:63pass64printhtmfoot65cd至karrigell所在目錄,輸入pythonKarrigell.py運(yùn)行后,在瀏覽器地址欄中輸入localhost:8081就可以看到頁(yè)面,點(diǎn)擊Message鏈接即可到達(dá)。運(yùn)行截屏思考,本日提出的,搜索結(jié)果積累想法,如何實(shí)現(xiàn)?如何在搜索時(shí)可以快速確認(rèn)以前曾經(jīng)搜索過相同的關(guān)鍵詞,直接輸出原先的搜索成果,不用真正打開CD信息文件來匹配?步驟:可以把之前搜索歷史記錄下來,這樣就可以在下次查詢某個(gè)關(guān)鍵詞時(shí),先查找這里的信息,若能夠找到則直接可以返回結(jié)果,沒有的話,再按照以前的方法遍歷搜索,同時(shí)更新這個(gè)新關(guān)鍵詞的信息。1、修改cdctools.py中的cdcGrep函式,增加查找,更新歷史記錄文件,具體可參見代碼。2、命令行中測(cè)試。第一次搜索關(guān)鍵詞EVA時(shí),出現(xiàn)結(jié)果為:{'z.MCollection.29.cdc':[],'mfj-00.cdc':[],'MCollec.39.cdc':[],'z.Animation.00.cdc':['[L:\\mAnimi\\Gainax\\EVAalbumESP]\r\n'],'z.MFC.pop.02.cdc':[]}這里的有效搜索信息就會(huì)增加到history_search.dump文件中。當(dāng)再次搜索該詞時(shí),出現(xiàn):{'z.Animation.00.cdc':['[L:\\mAnimi\\Gainax\\EVAalbumESP]\r\n']},因?yàn)閷?dǎo)出格式一致,所以頁(yè)面上無須修改。源碼:Togglelinenumbers1#-*-coding:utf-8-*-23HISTORY_SEARCH='./history_search.dump'4defcdcGrep(cdcpath,keyword):5'''光盤信息文本關(guān)鍵詞搜索函式6@note:使用最簡(jiǎn)單的內(nèi)置字串匹配處理來判定是否有關(guān)鍵詞包含7@paramcdcpath:包含*.cdc文件的目錄;運(yùn)行前得在__main__中修訂成你當(dāng)前的cdc數(shù)據(jù)存放點(diǎn)8@paramkeyword:搜索的關(guān)鍵詞9@return:組織匹配好的信息到字典中導(dǎo)出成searched.dump文件10@todo:可結(jié)合搜索引擎進(jìn)行模糊搜索!11'''12expDict={}13printcdcpath14try:15h_search=pickle.load(open(HISTORY_SEARCH))1617ifh_search.has_key(keyword):#如果已有該關(guān)鍵字,則直接使用歷史記錄中的,導(dǎo)出格式不變。18for(c,l)inh_search[keyword]:19ifexpDict.has_key(c):20expDict[c].append(l)21else:22expDict[c]=[l]23pickle.dump(expDict,open("searched.dump","w"))24return25except:26h_search={}2728filelist=os.listdir(cdcpath)#搜索目錄中的文件29forcdcinfilelist:#循環(huán)文件列表30if".cdc"incdc:31cdcfile=open(cdcpath+cdc)#拼合文件路徑,并打開文件32expDict[cdc]=[]33forlineincdcfile.readlines():#讀取文件每一行,并循環(huán)34ifkeywordinline:#判定是否
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 常州工程職業(yè)技術(shù)學(xué)院《高級(jí)阿拉伯語(yǔ)二》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆科技學(xué)院《外國(guó)史學(xué)名著選讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 淮北理工學(xué)院《社會(huì)學(xué)原理類》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶智能工程職業(yè)學(xué)院《生物統(tǒng)計(jì)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 赤峰學(xué)院《教育史專題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 梧州學(xué)院《現(xiàn)代舞創(chuàng)編》2023-2024學(xué)年第二學(xué)期期末試卷
- 東北林業(yè)大學(xué)《生物科學(xué)專業(yè)英語(yǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西航空職業(yè)技術(shù)學(xué)院《攝影報(bào)道》2023-2024學(xué)年第二學(xué)期期末試卷
- 合肥共達(dá)職業(yè)技術(shù)學(xué)院《現(xiàn)代電子測(cè)量技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古工業(yè)大學(xué)《概率論與數(shù)據(jù)統(tǒng)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國(guó)聚乙烯催化劑行業(yè)發(fā)展?fàn)顩r及需求規(guī)模預(yù)測(cè)研究報(bào)告(2024-2030版)
- 新能源汽車驅(qū)動(dòng)電機(jī)及控制系統(tǒng)檢修課件 學(xué)習(xí)情境4:電的轉(zhuǎn)換
- 車輛實(shí)際使用權(quán)協(xié)議書范文模板
- 新版加油站全員安全生產(chǎn)責(zé)任制
- 腦出血課件完整版本
- 涼山州小學(xué)數(shù)學(xué)教師業(yè)務(wù)素質(zhì)考試試題(真題+訓(xùn)練)
- 長(zhǎng)護(hù)險(xiǎn)定點(diǎn)機(jī)構(gòu)自查報(bào)告
- GB/T 6003.2-2024試驗(yàn)篩技術(shù)要求和檢驗(yàn)第2部分:金屬穿孔板試驗(yàn)篩
- 2025年初中地理八年級(jí)上冊(cè)全冊(cè)重點(diǎn)知識(shí)點(diǎn)復(fù)習(xí)課件
- 人工智能大模型
- 川教版信息技術(shù)五年級(jí)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)教案
評(píng)論
0/150
提交評(píng)論