zoukankan      html  css  js  c++  java
  • day_15补充加总结

    hashlib 模块

     Python的hashlib提供了很多摘要算法,如MD5,SHA1等常用算法。

      什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(如MD5值共32位,且每位都是用16进制进行表示)。

        摘要算法就是通过摘要函数对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

        摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算digest很容易,但通过digest反推数据data却非常困难,并且对原始数据做出任意的修改都会导致计算出的digest完全不同。

      综上所述,只要是一个完整且未被修改过的文件,它的MD5值或者其他算法值都是固定不变的,一旦计算出数值与原作者给出的数值不同,就要当心此文件的安全性了。

         那么,利用python怎么计算一个文件的MD5值呢?

         以下是简写代码:

    import hashlib
                                     
    def match(file)                     
        md5 = hashlib.md5()              #创建一个md5算法对象
        with open('file','rb') as f1:       # 打开你传入的文件
              data == f1.read(1024):    #如果文件较大,就会读爆内存,所以1以1024个单位读一次
              if data :                           #如果读出来的data不为空                        
                  md5.upadate(data)       # 就uadata 
              else:
                    break                         #否则空了 就退出 ,就是读完的意思
        ret = md5.hexfigest()               #获取此时的md5值
        return ret                               # 返回md5值 
    match(file)                                  #调用

          判断一个文件是否相同就是靠md5值相同判断

      求文件大小

    # import os
    # def func(a,sum=0):
    #     li = os.listdir(a)
    #     for i in li:
    #         if os.path.isfile(os.path.join(a,i)):
    #             sum += os.path.getsize(os.path.join(a,i))
    #         elif os.path.isdir(os.path.join(a,i)):
    #             sum += func(os.path.join(a,i),sum)
    #     else:
    #         return sum
    # c = func('D:\_S20作业答案day_11')
    # print(c)
     1 import os
     2 total_size=0
     3 def file_size(path):
     4     global total_size
     5     path=os.path.abspath(path)
     6     file_list=os.listdir(path)
     7     for i in file_list:
     8         i_path = os.path.join(path, i)
     9         if os.path.isfile(i_path):
    10             total_size += os.path.getsize(i_path)
    11         else:
    12             try:
    13                 file_size(i_path)
    14             except RecursionError:
    15                 print('递归操作时超出最大界限')
    16     return total_size
    17 
    18 
    19 print(file_size('D:\红军不怕远征难\苍老师精彩集锦')

        切记绝对路径跟相对路径,求文件大小要路径名为父文件名加现在所生成的绝对路径

          random 模块

         应用例题

         微信红包

          

    # # 设置红包价格:
    import random
    
    pocket = int(input('请输入你要发多大的红包').strip())
    num = int(input('请输入你要发多少个包').strip())
    def func(pocket,num):
        li = []
        lis1 = []
        for i in random.sample(range(1, pocket), k=num-1):
            li.append(i)
        lis = sorted(li)
        print(lis)
        for j in range(0,len(lis)):
            if j == len(lis)-1:
                break
            lis1.append(lis[j+1] - lis[j])
        lis1.append(pocket-lis[-1])
        lis1.append(lis[0])
        return lis1
    print(func(pocket,num))
    #常用模块
    #时间模块
    #time
    # time是datetime的底层模块
    # 时间戳
    # 结构化
    # 格式化时间
    # 结构化 = time.localtime(时间戳) 反向mktime
    # 字符串 = strftime(结构化) 反向 strptime
    #datetime
    # 时间对象
    # 计算时间差(timedelta)、时间的时分秒
    # import datetime
    # t = datetime.datetime.now()
    # print(t.date())
    # print(t.time())
    # print(t.timestamp())
    # print(t.day)
    # print(t.month)

    # collections
    # Counter
    # 可命名元祖 nametuple/time.struct
    # 双端队列 deque
    # 默认字典 defaultdict

    from collections import Iterable,Iterator,defaultdict
    # print(isinstance(open('a','w'),Iterator))
    # print(isinstance(open('a','w'),Iterable))
    # dic = defaultdict(lambda :5) 参数是可调用对象
    # dic = defaultdict() ## defaultdict(None, {})
    # print(dic)

    # 双端队列和列表的区别
    # 效率,底层的数据结构上
    # 列表是 在开头加东西,集体地址往后挪一步
    # 双端队列 从中间插入或者删除比较频繁的时候
    # 如果只是单纯的append和pop再加上查询比较多,这个时候用列表
  • 相关阅读:
    BZOJ 2876 骑行川藏
    BZOJ 2875 随机数生成器
    DT_修改注册项
    ip001
    ip
    阿里大鱼 阿里云api
    JS_全
    destoon框架二次开发【整理】
    destoon_笔记
    栏目class导航
  • 原文地址:https://www.cnblogs.com/CNHK1949/p/10569915.html
Copyright © 2011-2022 走看看