• 生成器版本的文件MD5校验


    生成器是一个可迭代的对象,可以对可迭代的对象进行便利,比如字符串、列表等,都是可迭代对象
     
     def f(n):
      for i in range(n):
        yield i
     
    特点:
      1、当调用这个函数的时候,函数内部的代码并不立马执行,这个函数只是返回一个生成器对象
      2、当使用for进行迭代的时候,函数内的代码才会被执行
     
    yield与return的区别:
      1、return的时候这个函数的局部变量就都销毁了
      2、所有return是得到所有结果之后的返回
      3、yield是产生一个可以恢复的函数(生成器),恢复了局部变量
      4、生成器只有在调用next()时才运行函数生成一个结果
      5、return 不能出现在生成器中
     
    yield版本的MD5:
     1 #!/usr/bin/env python
     2  
     3 import os
     4 import sys
     5 import hashlib
     6  
     7 def md5sum(f):
     8     m = hashlib.md5()
     9     with open(f) as fd:
    10         while True:
    11             data = fd.read(4096)
    12             if data:
    13                 m.update(data)
    14             else:
    15                 break
    16 return m.hexdigest()
    17  
    18 def file_md5(dirpath):
    19     pathobj = os.walk(dirpath)
    20     for roots,dirs,files in pathobj:
    21         for file in files:
    22             filename = os.path.join(roots,file)
    23             md5 = md5sum(filename)
    24             yield "%s %s" % ( md5,filename)
    25  
    26 def main():
    27     try:
    28         dirpath = sys.argv[1]
    29     except IndexError as e:
    30         sys.exit('need one dirctory')
    31     if os.path.isfile(dirpath):
    32         sys.exit('Please input a directory')
    33     for info in file_md5(dirpath):
    34         print info
    35  
    36  
    37 if __name__ == '__main__':
    38     main()                                                
     
     
     
  • 相关阅读:
    0401-服务注册与发现、Eureka简介
    001-OSI七层模型,TCP/IP五层模型
    云原生应用开发12-Factors
    0301-服务提供者与服务消费者
    0201-开始使用Spring Cloud实战微服务准备工作
    0107-将Monolith重构为微服务
    0106-选择微服务部署策略
    0105-微服务的事件驱动的数据管理
    0104-微服务体系结构中的服务发现
    0103-微服务架构中的进程间通信
  • 原文地址:https://www.cnblogs.com/dachenzi/p/6799203.html
Copyright © 2020-2023  润新知