一个完整的python程序


概述

  这部分主要是通过一些较大型的脚本来结束对python系统接口的学习,可以了解到python面向对象编程和代码复用等开发模式的支持。


一、寻找python标准库目录中的最大的库文件

任务实现逻辑:
(1)获取输入参数
(2)使用glob模块扫描目录下的文件
(3)获取文件的大小,并放入列表中
(4)大小排序,输出目标值


在指定目录树范围内找到最大的文件
如果目标是多个目录嵌套而成,需要扫描目录树,可以使用os.walk()函数。


可能出现的异常处理情况
(1)统一路径表示的差异情况,windows采用反斜杠。
(2)统一目录名称小大写的情况,windows不注重大小写的差异。
(3)跳过文件操作的异常,譬如获取文件的大小的调用错误等。
(4)二进制模式打开文件避免编解码错误。


扫描整台机器
(1)绕过不能解码的文件或目录名
(2)使用文件生成器和迭代器处理文件,避免内存使用问题和阻塞问题(逐行读取)。

打印Unicode文件名
(1)使用os.listdir()可以以两种不同方式返回文件,传入str时得到的是解码之后的str字符串,而传入bytes则是静态编码的字节字符串。
(2)在os.walk(b'xx')函数中传入字节字符串即可。
(3)由于文件名的解码错误出现在打印阶段,所以可以通过传入编码方法解决解码产生的错误,如print(dir.encode())。
(4)还可以将脚本的输出重定向到脚本,可避免该问题,因为这就不涉及到字符解码的问题了,python程序处理中只存在字节状态。

 

二、分割和合并文件

分割任务实现逻辑:
(1)处理出入参数的问题,因为该操作涉及的输入和输出内容比较多。
(2)文件切割操作,按照字节数读取,避免文本模式下读写产生的文件数据损坏,尤其是二进制文件。
(3)文件的打开和关闭操作,需严谨的处理,尽可能手动关闭。

合并任务实现逻辑:
(1)获取输入条件,需要合并的目录和文件。
(2)文件读取时,采用指定文件块大小读取,类似于流式读取比较高效。
(3)文件名排序的问题,依赖于设计时文件名的设置。


三、生成重定向网页

任务实现逻辑:
(1)使用os.listdir遍历站点目录下的所有文件名。
(2)使用字符串对象replace方法来执行全局搜索和替换操作。
(3)将替换完的文本内容写入预设好的文件中。

 

四、一个回归测试脚本

运行逻辑:
(1)收集指定测试脚本目录,遍历目录获取文件列表。
(2)从Input和Args子目录获取脚本输入和命令行参数。
(3)在Output子目录中为所有正常退出的测试生成最初的stdout输出文件。
(4)通过退出状态代码或stderr中的错误消息报告测试结果。

python自带的两个测试框架doctest,unittest。


五、复制目录树

任务实现逻辑:
(1)编写文件内容拷贝函数,使用二进制读写。
(2)编写文件信息收集(路径)函数,以及目标目录树的构建。
(3)输入信息检查和校验。


六、比较目录树

任务实现逻辑:
(1)输入参数收集和处理
(2)收集比较的两个目录中的文件列表。
(3)根据上一步骤的输出结果进行比较。

比较目录树中文件内容的差异性,需要添加以下逻辑:
(1)相同文件名的话先校验下内容的一致性,譬如MD5值比较。
(2)文件读取逐个字符的进行比较。


七、搜索目录树

实现类似grep、find、glob命令的功能
实现逻辑:
(1)使用os.walk函数遍历目录。
(2)使用字符串模式匹配遍历结果。

 

八、访问器:目录遍历"++"

在频繁的使用编码目录的各种形式之后,我们需要将这些需求进行归类和整理:
(1)冗余性,通过把共有的细节部分封装起来重复使用以简化遍历操作。
(2)可扩展性,考虑脚本的可扩展使用能力,提供可复制,更通用,可定制和复用的办法。
(3)封装性,将程序与其实现的细节尽量隔离开,即使os.walk就隔离了内部遍历的过程,但这个接口还是容易随时间而改变。

使用OOP编程技巧切入目录树搜索操作
(1)编写Filevisitor类,包含run方法运行主要运行逻辑,调用各种抽象的方法来描述业务处理流程。
(2)编写继承于Filevisitor类,定制更加细节的逻辑部分实现扩展功能。


九、播放媒体文件

实现逻辑:
(1)识别媒体文件类型
(2)收集媒体文件与对应系统媒体播放程序之间的对应关系
(3)调用系统程序打开对应的媒体文件

webbrowser模块
  根据指定的URL启动网页浏览器
mimetypes模块
  根据文件的名称来识别文件的类型

 

 


posted @ 2019-01-06 20:51  孤独的海浪  阅读(2615)  评论(0编辑  收藏  举报