首页 可爱的python.pdf.pdf

可爱的python.pdf.pdf

可爱的python.pdf.pdf

上传者: Bugac 2014-02-18 评分1 评论0 下载1 收藏0 阅读量852 暂无简介 简介 举报

简介:本文档为《可爱的python.pdfpdf》,可适用于软件工程领域,主题内容包含实例故事|实例故事RealyTasteStorys笔者自年接触Python到现在一直对Python的兴趣和信心有增无减。但Python在中国还处于推符等。

实例故事|实例故事RealyTasteStorys笔者自年接触Python到现在一直对Python的兴趣和信心有增无减。但Python在中国还处于推广普及的发展阶段。回想自己的学习体会基本是从“不知己不知”到“不知己知”再到“知己知”最后“知己不知”。具体来说是开始涉及一个全新技术领域时不知道这个领域的任何信息连“不知道什么”都没有概念后来通过各种途径获得了部分相关信息但不知道自个儿已经知道了哪些实用信息。再后来通过实践切实掌握了领域的基础知识明确在领域内掌握了什么最后掌握了领域间的关系明白自己究竟还有多少知识不知道。感觉只有快速达到“知己知”的阶段才可能事半功倍地继续学习下去。我想把自己的这种学习体验与心得与大家分享但怎么向那些没有摸到Python秉性的人们宣传这种体验呢?developerWorks中DavidMertz创作的“可爱的Python”系列也就成了本书的原型结构。(访问地址:http:wwwibmcomdeveloperworkscnlinuxthemespecialindexhtml#python精巧地址:http:bitlymfUT)下面两个以解决实际问题为出发点有剧情有人物的小白成长故事将Python最可爱的方面以小篇幅的轻松形式组织起来!希望读者可以跟随小白轻松体验到Pythonic。|CDays“光盘故事”CDays“光盘故事”CDayPython初体验和原始需求CDay可用的首个Python脚本CDay通过函式进行功能化CDay完成核心功能CDay实用化中文CDay时刻准备着!发布CDay优化!对自个儿的反省CDay界面!不应该是难事儿CDay优化!多线程CDayN基于Python的无尽探索CDays“光盘故事”|CDayPython初体验和原始需求Justuseit!don'tlearn!只用不学!剧本背景本书采用实例故事的形式来讲解Python所谓实例故事就是设计一个具体情景让代表读者的初学者同代表作者的行者沟通从而完成学习过程在过程中引导式地给读者展示Python的乐趣当然读者不一定什么都不知道作者也可能高明不到哪里去但是有个具体的事讲起来就更有针对性一些。好的这就开始。依照传统说书的方式先来个定场诗活跃一下气氛。左咖啡右宝石还是灵蟒最贴心!最贴心不费心用好只须听故事。想清楚就清楚一切自己来动手!要清爽常重构!刚刚够用是王道!下面正式开场。人物介绍书中会涉及两个人物一个是小白一个是行者他们分别代表小白:没有或是仅有一点编程体验的好奇宝宝想快速上手使用Python解决实际问题。|实例故事行者:啄木鸟CPyUG等中国活跃Python社区的热心Python用户说话可能有些颠三倒四但是绝对都是好心人。约定下面是本书所使用的一些体例约定。列表:指的是邮件列表一种仅仅通过邮件进行群体异步交流的服务形式是比BBS更加古老和有效的沟通方式。小结:在每日故事讲完之后会通过小结的方式将当日故事情节中涉及的知识点和领域技术进行集中简述以便读者明确要点。练习:每日故事的最后一节内容虽然它所包含的问题和故事内容可能没有太大关联但是这些问题必须使用前述涉及的知识点和领域技术才可以解决所以特别列出建议读者独立进行尝试加强对相关知识的理解。习题解答发布在图书维基:http:wikiwoodpeckerorgcnmoinObpLovelyPythonLpyAttAnswerCdays精巧地址:http:bitlyXzYIX用SVN下载:http:openbookprojectgooglecodecomsvntrunkLovelyPythonexercisepartCDays事件小白忽然厌烦了不断地下载安装、破解却总是找不到称心软件的生活:“烦人!什么破软件这么不好使还要$!!!我!要!自个儿写!”邮件列表有古老的规范和格式。访问地址:http:wwwwoodpeckerorgcnshareclassesCPUGusMaillist精巧地址:http:bitlyWKcRCPyUG社区有丰富的列表资源。访问地址:http:wikiwoodpeckerorgcnmoinCPUGres精巧地址:http:bitlyvrqUkCDays“光盘故事”|发动究竟怎么回事儿呢?小白到列表中一说大伙这才明白原来他买了台刻录机于是没日没夜地进行eMule的下载才一个月刻录出来的光盘就有了上百张结果当他想找回一个专辑的MP时却遍寻不着……所以他想要一种工具不用插入光盘就可以搜索所有光盘的内容。就这么简单的一个愿望可是咋就找不到好用的软件呢!这才有了上述那一幕。Python!OK!你们都说Python好用我就来尝试一下吧!我是菜鸟我怕谁!运行环境:推荐ActivePython虽然此乃商业产品却是一个有自由软件版权保证的完善的Python开发应用环境关键是文档及相关模块的预设都非常齐备。在GNULinux环境中当然推荐使用原生的Pythonorg主流的自由操作系统发行版都内置了Python环境对应的软件仓库中都有合适的Python版本可以选择安装和使用也非常方便。好了下载、安装吧……HelloWorld!“HelloWorld”非常非常著名但凡是编程语言第一课都要玩这个例程下面我们也看一看Python的如图CDay所示!图CDayHelloWorld示例再展示一个类似的但是推荐的体验环境为iPython如图CDay所示。PCS“交互环境之winpy”含有关于ActivePython的简介网址为:http:wwwactivestatecomProductsActivePythonActiveState是商业公司但是对自由软件支持良多。Pythonorg的网址为:http:wwwpythonorgdownload它是Python语言本身的大本营。PCSPCS“交互环境之iPython”相关网址为:http:ipythonscipyorgiPython是个融合了N多UnixShell环境特质的Python交互式命令行环境推荐使用你会爱上Tab键的。PCS|实例故事图CDayHelloWorld示例(iPython)就是这么简单告诉Python打印“HelloWorld!”就行了。所以说对于Python可以只用不学!文档丰富的文档可以安抚我们面对未知的恐惧推荐深入阅读以下资料但是不推荐现在就全面阅读。PythonTutorialPython教程中文版本在线访问:http:wikiwoodpeckerorgcnmoinMarchLiuPyTutorial精巧地址:http:tinyurlcomhqg这是CPyUG(ChinesePythonUserGroup)中国Python用户组的资深专家刘鑫长期维护的一个基础文档也是Python创造者GuidovanRossum唯一亲笔撰写的技术文档!AByteOfPython简明Python教程在线访问:http:wwwwoodpeckerorgcnsharedocabyteofpythoncnchineseindexhtml精巧地址:http:tinyurlcomkpv这是由沈洁元翻译的一篇流传甚广的学习Python的小书从初学者的角度快速说明了一些关键知识点。原作者是印度的一位年轻的程序员大家可以到这本书的网站直接和作者沟通:http:wwwswaroopchcombyteofpython。Python标准库的中文版在线访问:http:wwwwoodpeckerorgcnsharedocPythonhtmlPythonStandardLib精巧地址:http:tinyurlcompmvkn由“Python江湖QQ群”全体成员共同完成Python内置所有标准模块的说明是CDays“光盘故事”|初学者开发过程中必备的参考。ASPNPythonReference~Activestate公司Python参考资料汇总在线访问:http:aspnactivestatecomASPNPythonReference精巧地址:http:tinyurlcomtsl原始需求安装好了Python环境在行者的指点下又收集了一批资料的链接下面小白想真正开始软件的创造了。但是行者又告诫道:“明晰你的问题当问题真正得到定义时问题已经解决了一半。因为程序不过是将人的思想转述为机器可以理解的操作序列而已对于寻求快速解决问题而不是研究问题的小白和Pythoner们精确、恰当地描述问题就等于写好了程序框架余下的不过是让程序可以运行罢了。”于是小白根据直觉将软件需求细化了一下:不用插入光盘就可以搜索所有光盘的内容等于说……要将光盘内容索引自动储存到硬盘上要根据储存到硬盘上的光盘信息进行搜索就这两点也仅此两点的需求可以如何以及怎样通过Python实现?小白和读者一同期待……小结作为开始今天小白决定使用Python来解决光盘内容管理这一实际问题安装了python环境运行了“HelloWorld!”实例。OK!轻松的开始但是你知道你同时也获得了免费的绝对强大的科学计算器吗?练习计算今年是否是闰年。判断闰年条件满足年份模为或者模为但模不为。|实例故事利用Python作为科学计算器的特性熟悉Python中的常用运算符并分别求出:)*)(*())、()**并利用math模块进行数学计算分别求出:的余数的sin和cos值(注意sin和cos中的参数是弧度制表示法)提示:可通过importmathhelp("math")查看math帮助。找出~的所有素数。CDays“光盘故事”|CDay可用的首个Python脚本寻找吧!不要先想着创造Python是自足的。现在的需求小白根据曾经下载过的几个类似商业软件名称给自个儿的软件起了个名字叫“PyCDC”即Python制作的光盘收集器(CDCollector)或者命令工具(CDCommander)。再次确认当前的需求:将光盘内容索引储存为硬盘上的文本文件可以根据储存到硬盘上的光盘信息进行搜索。因为小白痛恨数据库(只能通过神奇的SQL语句才能调动数据库中的数据太不直观太不人性化了!)所以这第一个需求是将光盘信息读取为文本文件。文件是系统的事儿现在首要问题是“如何读取指定光驱中的文件列表信息?”行者仅仅给了一条批示:文件是系统的事儿。listdir()系统操作系统operatingsystemos模块|实例故事呜乎!小白搜索了一大圈才弄明白什么叫“系统”而且找到了相应的“模块”。在《简明Python教程》的第章“Python标准库os模块”中看到一句话:oslistdir()返回指定目录下的所有文件和目录名。看起来可以利用这个函数所以创建第一个执行脚本CDaypy:#*coding:*importosprintoslistdir("mediacdrom")代码注解:#*coding:*应该像八股文一样在每个脚本的头部声明这是个忠告为了解决中文兼容问题同时你应该选择支持Unicode编码的编辑器环境保证在运行脚本中的每个汉字都是使用编码过的。importos就是告诉Python环境我们要使用os模块依此类推如果你想使用任何己有的模块包就使用“import模块名”的形式引用。最后一行才是我们真正想做的事儿:打印光盘根路径中的所有文件和目录。同时小白也进一步了解了什么是脚本为什么会有脚本。因为Python程序不用编译它是人写的程序文件可以直接执行就像话剧脚本一样所以也称Python程序文件为脚本。在交互式命令行环境中固然可以立即获得执行结果但是在尝试过程中的各种程序代码无法被记忆下来所以事先写好脚本很重要使用运行命令“python脚本名py”的形式就可以反复执行所有代码行。脚本是Python丰富的运行形式之一也是最常用的一种。上面的脚本运行结果类似图CDay:图CDay使用脚本运行当然在iPython环境下逐步运行也一样如图CDay所示。图CDayiPython中运行以上截屏输出是使用Ubuntu安装光盘来测试的结果当然小白使用进一步的目录PCS“os(statpath)”中对os模块有进一步细节描述。《简明Python教程》的第章“Python标准库”的访问地址:http:wwwwoodpeckerorgcnsharedocabyteofpythoncnchinesechshtml精巧地址:http:bitlyFXXYPCSPCS“Python脚本文件”中进一步说明了脚本文档在各种操作系统中的表现以及基础性的知识。PCSCDays“光盘故事”|时oslistdir()的确可以报告指定目录的所有信息但是问题是如何自动地将整个光盘中的所有文件和目录信息都“一次性地扫描”出来?当然自个儿写一个是可以的不过这只是根据每级目录的信息再次不断调用oslistdir()将所有层次的目录信息都逐一汇报出来而已这样做值得吗?小白的热情是非常容易被看来很麻烦的代码实现击碎的……于是热心的无所不能的行者又提了句:“使用walk()”。提示:笔者使用Ubuntu系统对于文件系统的使用和小白所使用的Windows系统稍有不同:Ubuntu没有分区的概念光盘一般会自动统一地挂接到mediacdrom目录而小白则可以自由地使用G:等类似的盘符进行替换。放心Python足够聪明它是跨平台的。须要提醒的是Windows中最好使用d:进行分区的指定。否则会出现类似d:tmpsomething的混合输出。walk一阵乱搜后发现居然有个单独的模块ospath是进行文件路径处理的!再一搜索英文发现:Note:Theneweroswalk()generatorsuppliessimilarfunctionalityandcanbeeasiertouse好像在我们的环境中有两个walk():ospathwalk()和oswalk()是不是后一个更新也更好用按照osfiledir的示例改造脚本尝试CDaypy:#*coding:*importosforroot,dirs,filesinoswalk('mediacdrom'):printroot,dirs,files然后按照脚本运行方式尝试:~$pythonCDaypy哇!一下子输出了一大堆的东西!看来管用应该是将整个光盘的文件目录信息都扫描出来了。PCS“交互环境之iPython”详细说明了加强的交互命令行界面iPython的甜美简要地说iPython是Python原生交互环境的加强追加了很多纯正Unix风味的响应特性。PCSUbuntu是最流行的GNULinux发行版。官方网站:http:wwwubuntucom中文官方网站:http:wwwubuntuorgcnPSC“os(statpath)”含有os模块进一步细节其中ospath()函式的详细说明可在线查阅。访问地址:http:aspnactivestatecomASPNdocsActivePythonpythonlibmoduleospathhtml精巧地址:http:bitlyXDkPCSPCS“常用自省”中详细介绍了最常用的几个Python内建函式它们可以通过自省的方式来快速对Python进行查询寻找想要的处理支持。PCSpanzhizhou附注首先我的做法就是把u盘当作cd,然后想把u盘里面的信息读出来并作索引但是目前是读出来的中文显示乱码这里关于编码的部分还需要解决!!|实例故事不管三七二十一先保存为文件!输出成文件小白根据行者的指引同时也进行了搜索了解了fileobjects文件对象操作相关知识然后自己加了点儿想象就组成了以下脚本CDaypy:#*coding:*importosforroot,dirs,filesinoswalk('mediacdrom'):open('mycdcdc','a')write(rootdirsfiles)尝试执行~$pythonCDaypy如图CDay所示。图CDay初步CDaypy脚本运行结果完了!报错!……小白感觉信心又降到了冰点。“呵呵”行者说“不用担心在Python中想要解决bug是非常轻松的因为它有完善的回溯能力。Python可以非常精确地汇报小白出错的时间、地点、原因我们只要对应修订就行了。”现在的问题是:TypeError:cannotconcatenate'str'and'list'objects也就是说不能将str和list对象进行连接。这是非常直白的数据类型错误。什么是“数据类型”?这问题可以复杂地解释也可以简单地说。复杂的解释并不能帮助小白理解和记忆简单的说也不一定能加深印象。通俗地讲呢就是计算机内存空间中有不同的种族好比鸡鸭同笼长的都挺像但是没有办法卖相同的价钱除非都剁碎了炸成春卷也就是说只要发生类似数据类型时把它们转换成相同的类型就得了!这种方式对于其他语言来说可能会很麻烦但是在Python中是再简单不过的了。因为Python里一切都是对象。讨教行者后他们给了个样例:print"ssss"("字串","数","组",("元","组"),{'字典':})如果小白有C编程经验立即就可以联想到这是输出格式化的技巧使用s的格式化声明要求后面的对象以String字串的格式进行转换所以脚本CDaypy的改造也就顺理PCS“os(statpath)”中有os模块的进一步细节描述其中osfiledir可以在线查阅:http:aspnactivestatecomASPNdocsActivePythonpythonlibosfiledirhtml精巧地址:http:bitlyeJjfPCSPCS“os(statpath)”中对os模块有进一步的细节描述其中fileobjects可以在线查阅:http:wwwwoodpeckerorgcndiveintopythonfilehandlingfileobjectshtml精巧地址:http:bitlyeSWPCS“Python里一切都是对象”是理解应用Python的关键之一详细内容请参考《万物皆对象》:http:wwwwoodpeckerorgcndiveintopythongettingtoknowpythoneverythingisanobjecthtml精巧地址:http:bitlytiwrdPCS“For循环”进一步说明了小白首次遇见的新语法现象这也是一切程序中最基本的反复运行相似语句的技巧。PCSCDays“光盘故事”|成章了:#*coding:*importosforroot,dirs,filesinoswalk('mediacdrom'):open('mycdcdc','a')write("sss"(root,dirs,files))代码注解:声明是编码文本引入了os模块使用oswalk()扫描光盘并返回三个对象使用open()打开mycdcdc文件对象并声明成追加模式逐行记录以上三个对象。不过执行没有报错而且文件也生成了但是为什么打不开……呵呵那是另一个问题了。小结通过指点以及在文档中狂乱的搜寻小白今天顺利地将光盘信息全部扫描出来了并存储成了文件!不过仅仅行代码真正运行可用的也就两行代码居然已经可以达到想要的软件功能的……Python是不是很神奇?今天小白其实已经接触到了一大批概念:模块importos内置函式open()循环forin块界定符注释符对象文件对象对象转换格式化声明s数据类型。|实例故事不过它们都包含在了行代码中。我们的原则是:先用后学快速获得体验然后寻求理论支持所以先不求甚解达到目的然后就自在了。练习os模块中还有哪些功能可以使用?提示:使用dir()和help()。open()还有哪些模式可以使用尝试forin循环可以对哪些数据类型进行操作格式化声明还有哪些格式可以进行约定下面的写入文件模式好吗有改进的余地吗下面是CDaypy它好在哪里#*coding:*importosexport=""forroot,dirs,filesinoswalk('mediacdrom'):export="nsss"(root,dirs,files)open('mycdcdc','w')write(export)以下的CDaypy又更加好在哪里#*coding:*importosexport=forroot,dirs,filesinoswalk('mediacdrom'):exportappend("nsss"(root,dirs,files))open('mycdcdc','w')write(''join(export))读取文件cdaystesttxt内容去除空行和注释行后以行为单位进行排序并将结果输出为cdaysresulttxt。#somewordsSometimesinlife,YoufindaspecialfriendSomeonewhochangesyourlifejustbybeingpartofitSomeonewhomakesyoulaughuntilyoucan'tstopSomeonewhomakesyoubelievethattherereallyisgoodintheworldSomeonewhoconvincesyouthattherereallyisanunlockeddoorjustwaitingforyoutoopenitThisisForeverFriendship涉及知识点的进一步信息请查阅对应的作弊条:PCS“import”说明引入模块的技巧PCS“内建函式”介绍一些最常用的内建函式PCS“For循环”介绍最常用的循环体PCS“缩进”阐述了Python最大的特点:使用缩进来区分语法单位PCS“注释”介绍了Python式的注释方式PCS“对象”介绍了Python中的一等公民PCS“文件对象”介绍了最常用的对外交互渠道:文件及其处置对象PCS“字串格式化”介绍了Python内置的字符模板支持特性PCS“内建数据类型”介绍了动态语言的最大便利:自由类型转换的体验PCSpanzhizhou高亮列表和元组都行CDays“光盘故事”|whenyou'redown,andtheworldseemsdarkandempty,YourforeverfriendliftsyouupinspiritsandmakesthatdarkandemptyworldsuddenlyseembrightandfullYourforeverfriendgetsyouthroughthehardtimes,thesadtimes,andtheconfusedtimesIfyouturnandwalkaway,Yourforeverfriendfollows,Ifyouloseyouway,YourforeverfriendguidesyouandcheersyouonYourforeverfriendholdsyourhandandtellsyouthateverythingisgoingtobeokay|实例故事CDay通过函式进行功能化不断否定自己但要坚持最初的意愿不论战术上如何变化千万不要忘记战略目标。如果小白真正理解和可以自如应用前一日所讲的行代码中包含的各种知识那么离完成软件之日就已经不远了。需求首先小白根据已有的体验对PyCDC的软件需求进行了进一步完善。将光盘内容索引存储为硬盘上的文本文件。)存储成*cdc的文本文件)可以快速指定文件名。根据储存到硬盘上的光盘信息进行搜索。)可以搜索指定目录中所有*cdc文件。这样一来可以看出PyCDC的使用其实分为两部分。刻录光盘时将光盘信息通过PyCDC存储为对应光盘标号的*cdc文件。使用光盘时在PyCDC中搜索确认cdc文件名即光盘标号从而针对性地读取确切的光盘不用遍寻所有光盘了!CDays“光盘故事”|功能化简单地讲就是将以往验证想法的代码变成可以方便使用的功能让它可以重复在不同应用环境中使用。小白想象着自个儿的PyCDC可以像普通的命令行工具一样来使用:pythonpycdcpyemycdcdc#将光盘内容记录为mycdcdcpythonpycdcpyecdcmycdcdc#将光盘内容记录到cdc目录中的mycdcdcpythonpycdcpydcdck中国火#搜索cdc目录中的光盘信息寻找有“中国火”字样的文件或是目录在那张光盘中可能还有其他的功能但是最核心的功能应该就是这样。要想达到这种效果最直接的的方法就是函式化!函式化声明函式名定义参数然后使用缩进将前一日摸索出来的代码包装一下使用参数代替原先指定的目录和文件名请看CDaypy。#*coding:*importosdefcdWalker(cdrom,cdcfile):export=""forroot,dirs,filesinoswalk(cdrom):export="nsss"(root,dirs,files)open(cdcfile,'w')write(export)cdWalker('mediacdrom','cdcdc')cdWalker('mediacdrom','cdcdc')小白获得了第一个Python函式并成功运行了两次即将同张光盘的内容记录到不同的文件中!非常easy。交互参数但是如何从命令行获取输入的参数呢?搜索或是询问后从行者那儿又获得一个提示:printsysargv。那么无畏的小白立即创建了一个将真正使用的功能脚本pycdcvpy并尝试加入了最新的提示代码:PCS“函式”进一步说明了什么是函式什么时候应该将代码集成为函式等知识。在Python中对象是一等公民函式则是实际可用脚本中最基础的人民了。精巧地址:http:bitlyvrqUkPCS|实例故事#*coding:*importosprintsysargvdefcdWalker(cdrom,cdcfile):export=""forroot,dirs,filesinoswalk(cdrom):export="nsss"(root,dirs,files)open(cdcfile,'w')write(export)#cdWalker('mediacdrom','cdcdc')运行结果如图CDay所示:图CDaypycdcvpy运行结果OK出错了但是有了os模块的经验瞧着sysargv这么眼熟小白猜这是个模块需要引入所以微小地改动了一下代码:#*coding:*importos,sysprintsysargvdefcdWalker(cdrom,cdcfile):export=""forroot,dirs,filesinoswalk(cdrom):export="nsss"(root,dirs,files)open(cdcfile,'w')write(export)#cdWalker('mediacdrom','cdcdc')运行结果如图CDay所求:图CDay修改pycdcvpy后的运行结果Great!一切如愿然后就是简单的识别参数问题了。逻辑判断好了小白有了自个儿的体验:当面对不熟悉的工具时会对应该输入什么参数一头雾水此时若软件能友好智能地进行提示就太好了……PCS“交互参数”进一步分享了有关交互参数的使用方法读者可以深入了解sys及其使用方法。PCSCDays“光盘故事”|要做到这一点得对未知用户的行为进行判定对非期待的输入进行提示而不是由Python自个儿出错中断。与其他语言类似Python中也有if、else等类似逻辑判别语句不妨找到相关内容照猫画虎:#*coding:*importos,sysCDROM='mediacdrom'defcdWalker(cdrom,cdcfile):export=""forroot,dirs,filesinoswalk(cdrom):export="nsss"(root,dirs,files)open(cdcfile,'w')write(export)#cdWalker('mediacdrom','cdcdc')if"e"==sysargv:cdWalker(CDROM,sysargv)print"记录光盘信息到s"sysargvelse:print'''PyCDC使用方式:pythonpycdcpyemycdcdc#将光盘内容记录为mycdcdc'''代码注解:使用全局参数CDROM指定当前的光盘访问路径总是mediacdrom通过if"e"==sysargv判定第二个参数是e时使用第三个参数作输出文件名记录光盘信息并输出提示通过else捕获所有意外情况输出错误提示结束脚本。OK看起来应该已经完成了一两项功能但是实际运行时结果如图CDay所示:图CDaypycdcvpy运行IO错误尝试带目录的输出时:IOError:ErrnoNosuchfileordirectory:'cdcmycdcdc'IO输入出问题当然啦cdc目录并不存在。手工建立cdc目录后再运行就OK了所以功能设计细化为:PCS“系统参数”进一步分享了有关函式参数的使用技巧对于cdWalker(CDROMsysargv)读者可以深入了解其使用方法。PCSPCS“逻辑分支”进一步详细说明了进行条件判别时Python支持的方式。PCS|实例故事~$pythonpycdcpyemycdcdc##第个参数是"e"使用cdWalker()将光盘内容记录为mycdcdc~$pythonpycdcpyecdcmycdcdc##第个参数是"e"而且第个参数中含有目录指定##就将光盘内容记录到cdc目录中的mycdcdc如果cdc目录不存在,可以自动创建。~$pythonpycdcpydcdck中国火##第个参数是"d"而且第个参数是"k"##就搜索cdc目录中的光盘信息输出含有关键字“中国火”的文件或是目录指出它在哪张光盘中。完成以上所有功能和判定部分的伪代码:if"e"==sysargv:#判别sysargv中是否有目录以便进行自动创建cdWalker(CDROM,sysargv)print"记录光盘信息到s"sysargvelif"d"==sysargv:if"k"==sysargv:#进行文件搜索else:print'''PyCDC使用方式:pythonpycdcpydcdck中国火#搜索cdc目录中的光盘信息寻找有“中国火”字样的文件或是目录在哪张光盘中'''else:print'''PyCDC使用方式:pythonpycdcpydcdck中国火#搜索cdc目录中的光盘信息寻找有“中国火”字样的文件或是目录在哪张光盘中'''到这一步小白已经开始头大了如果功能继续追加软件进一步友好地自动识别各种意外情况这棵逻辑树将会可怕地增长下去……小白没有耐心和信心面对如此永无止境的意外情况的判别于是开始寻找其他解决方案……小结为了快速将已知技巧转化为可用脚本小白接触到了以下知识:sys模块的接收交互参数函式概念panzhizhou高亮CDays“光盘故事”|逻辑判定语句伪代码技术进行开发复杂度的估算。练习根据DiPy处理命令行参数(http:wwwwoodpeckerorgcndiveintopythonscriptsandstreamscommandlineargumentshtml精巧地址:http:bitlyxgMw)使用getoptgetopt()优化当前功能函式。读取某一简单索引文件cdaystesttxt其每行格式为:文档序号关键词现须根据这些信息将它转化为倒排索引即统计关键词在哪些文档中格式如下:包含该关键词的文档数关键词=>文档序号。其中原索引文件作为命令行参数传入主程序并设计一个collect函式统计“关键字序号”结果对最后在主程序中输出结果至屏幕。cdaystesttxt内容:keykeykeykeykeykeykeykeykeykey在一个国际象棋盘上有个皇后每个皇后占一格要求皇后间不会出现相互“攻击”的现象即不能有两个皇后处在同一行、同一列或同一对角线上问共有多少种不同的方法。PCS“os(statpath)”详细说明了os及其包含模块的常用函式分享了os在常见场景中的使用技巧。PCSpanzhizhou高亮|实例故事CDay完成核心功能利用文本文件完成核心功能没有完美的软件够用并且容易使用的软件已经算是完美的了。回顾需求已经获得命令行工具样的程序的小白几乎可以脱离小白的称号了他可以独立根据已往经验不断尝试出成果来就该是大白了。现在可以将最初的需求细化成这样:将光盘内容索引存储为硬盘上的文本文件)存储成*cdc的文本文件)可以快速指定文件名z通过命令行调用pythonpycdcpyemycdcdc根据储存到硬盘上的光盘信息进行搜索)可以搜索指定目录中所有*cdc文件z通过命令行调用pythonpycdcpydcdck中国火但是要完成一个个看似简单实际有N多情况的逻辑判定实在是件令人沮丧的事儿小白吼了声:“俺就是想做个简单的命令行工具咋就这么难呢?”热心的行者又出声了:“使用cmd吧!”CDays“光盘故事”|cmd模块cmd:Supportforlineorientedcommandinterpreters咦?它是专门支持命令行界面的模块?!但是几乎没有可以照抄的代码呀!照猫画虎的重要资源不搜不知道一搜吓一跳!原来英文技术书已在出版社网站上公开了书中的代码样例比如:《LearningPython》(见图CDay)、《LearningPythonSecondEdition》。按照大学里论文的制造模式进行相关尝试(即从已被证实正确的基础上加以改造)成功的机会比较大!图CDayLearningPython那么我们可以参考第一版《LeaningPython》第章的例程rolopy。重构当前代码重构(refactoring)听上去好像是很高级的编程技术其实说穿了就是自个儿看不过去自个儿于是不断地将代码修改得更加合理使之运行起来更加高效。小白的目标是快速实现心中的功能但是现在面对的又一个全新的模块他想使用干净的脚本进行尝试所以考虑重构于是将原先的代码整理到cdctoolspy创建新脚本pycdcvpy:#*coding:*importsys,cmd“资源索引”章节中有完整的在线中文文档的资源介绍有意的读者可以在网络中针对性的对有兴趣的Python内容进一步学习。精巧地址:http:bitlyvrqUk|实例故事classPyCDC(cmdCmd):definit(self):cmdCmdinit(self)#initializethebaseclassdefhelpEOF(self):print"退出程序Quitstheprogram"defdoEOF(self,line):sysexit()defhelpwalk(self):print"扫描光盘内容walkcdandexportinto*cdc"defdowalk(self,filename):iffilename=="":filename=rawinput("输入cdc文件名::")print"扫描光盘内容保存到:'s'"filenamedefhelpdir(self):print"指定保存搜索目录"defdodir(self,pathname):ifpathname=="":pathname=rawinput("输入指定保存搜索目录:")defhelpfind(self):print"搜索关键词"defdofind(self,keyword):ifkeyword=="":keyword=rawinput("输入搜索关键字:")print

职业精品

(汽车)产品营销策划书范文.doc

HH牙膏营销方案策划书.doc

加班管理人力资源考勤管理系统方案.doc

物品采购管理制度-正式.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 420
所需积分:1 立即下载

意见
反馈

返回
顶部