• 一个完整的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模块
      根据文件的名称来识别文件的类型


  • 相关阅读:
    ctags and vim
    [转]bash快捷键
    util-linux编译unknown architecture 'BSD_LABELSECTOR' undeclared错误
    HTML5安全攻防详析之八:Web Socket攻击
    HTML5安全攻防详析之七:新标签攻击
    HTML5安全风险详析之六:API攻击
    HTML5安全风险详析之五:劫持攻击
    HTML5安全风险详析之四:Web Worker攻击
    HTML5安全风险详析之二:Web Storage攻击
    HTML5安全风险详析之一:CORS攻击
  • 原文地址:https://www.cnblogs.com/solitarywares/p/10230315.html
Copyright © 2020-2023  润新知