hashlib模块,写函数校验两个文件是否内容相同(如果这两个文件很大)

import hashlib
md5 = hashlib.md5()
md5.update(b'hello')
md5.update(b'world')
ret = md5.hexdigest()
print(ret)
md5 = hashlib.md5()
md5.update(b'helloworld')
ret = md5.hexdigest()
print(ret)
#对比文件一致性的时候还需要加盐?
# 一个文件的md5值和另一个文件的md5值是不是一样
#两个文件 为什么要加密去对比
#文件的一致性校验
#视频软件
# 下载完成之后 转转转 正在检测当前文件是否可用
# 这是一个损坏的文件 不能使用
import os
import hashlib
def file_md5(path):
    filesize = os.path.getsize(path)
    md5 = hashlib.md5()
    with open(path,'rb') as f:
        while filesize >= 4096:
            content = f.read(4096)
            md5.update(content)
            filesize -= 4096
        else:
            content = f.read(filesize)
            if content:
                md5.update(content)
    return md5.hexdigest()
def cmp_file(path1,path2):
    return file_md5(path1) == file_md5(path2)
path1 = r'D:\s20\day18\视频\4.面向对象整理.mp4'
path2 = r'D:\s20\day18\视频\tmp.mp4'
ret = cmp_file(path1,path2)
print(ret)
import hashlib

def Check_Diff(file_pathI,file_pathII):
    with open(file_pathI,mode='r',encoding='utf-8') as f1,\
            open(file_pathII,mode='r',encoding='utf-8') as f2:
                for lineI,lineII in zip(f1,f2):
                    SHAI = hashlib.sha256(lineI.encode('utf-8'))
                    SHAII = hashlib.sha256(lineII.encode('utf-8'))
                    if SHAI.hexdigest() != SHAII.hexdigest():
                        return '这两个文件不是同一个文件'
                else:
                    return '这两个文件是同一个文件'

ret = Check_Diff('list.txt','list.txt')
print(ret)

hashlib做一个密文存储密码的注册登陆程序

import hashlib
def md5(username,password):
    md5 = hashlib.md5(username[::-1].encode('utf-8'))
    md5.update(password.encode('utf-8'))
    return md5.hexdigest()
def get_line():
    with open('userinfo', encoding='utf-8') as
        for line in f:
            user, pwd = line.strip().split(',')
            yield user,pwd
def register():
    flag = True
    while flag:
        username = input('user :')
        password = input('passwd :')
        for user,pwd in get_line():
            if user == username:
                print('您输入的用户名已经存在')
                break
        else:
            flag = False
    password = md5(username,password)
    with open('userinfo',encoding='utf-8',mode='a') as f:
        f.write('%s,%s\n'%(username,password))
def login():
    username = input('user :')
    password = input('passwd :')
    for user,pwd in get_line():
        if username == user and pwd == md5(username,password):
            return True
ret = login()
if ret:
    print('登陆成功')
import hashlib

def encrypt_action(username,password,action='login',encrypt_file='encrypt_file.txt'):
    with open(encrypt_file,mode='a+',encoding='utf-8') as file:
        userencrypt = hashlib.sha256(username.encode('utf-8'))
        userencrypt.update(password.encode('utf-8'))
        if action == 'register':
            file.seek(0,0)
            for line in file:
                if line.strip() == userencrypt.hexdigest():
                    return '账号已经注册,请更换其他账号登陆.'
            else:
                file.write(str(userencrypt.hexdigest())+'\n')
                return '用户注册成功'
        elif action == 'login':
            file.seek(0,0)
            for line in file:
                if line.strip() == userencrypt.hexdigest():
                    return '用户登陆成功'
            else:
                return '用户名或密码不对.'
        else:
            return 'Warning'

menu = '加密注册登陆程序'.center(20,'-') + '\n' +'''
1. 登陆系统
2. 注册账户
3. 退出程序
'''
exit_flag = 'False'
while exit_flag == 'False':
    print(menu)
    Choice = input('>>>').strip()
    if Choice == '1':
        username,password = input('UserName:').strip(),input('Password:').strip()
        ret = encrypt_action(username,password)
        print(ret)
    elif Choice == '2':
        username,password = input('UserName:').strip(),input('Password:').strip()
        ret = encrypt_action(username,password,'register')
        print(ret)
    else:
        exit_flag = 'True'
    print('\n')

拼手气发红包函数

#怎么能第一个人和最后一个人能取到多少钱是平均概率
import random
def red_pac(money,num):
    ret = random.sample(range(1,money*100),num-1)
    ret.sort()
    ret.insert(0,0)
    ret.append(money*100)
    for i in range(len(ret)-1):
        value = ret[i+1] - ret[i]
        yield value/100
g = red_pac(200,10)
for i in g:
    print(i)

os模块,计算文件夹的总大小

  1. 这个文件夹里都是文件
  2. 这个文件夹里还有文件夹
import os

def GetFileSize(dirpath):
    count_size = 0
    for file in os.listdir(dirpath):
        count_size += os.path.getsize(file)
        return count_size

def bytes2human(n):
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
    prefix = {}
    for i, s in enumerate(symbols):
        prefix[s] = 1 << (i + 1) * 10
    print(prefix)
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = float(n) / prefix[s]
            return '%.1f%s' % (value,s)
    return '%sB' % n

Size = GetFileSize('.')
ret = bytes2human(Size)
print(ret)
import os

def size(path):
    num = 0     
    list_name = os.listdir(path) 
    for i in list_name:
        file_name = os.path.join(path,i)
        if os.path.isdir(file_name):  
            num1 = size(file_name)   
            num += num1
        else:
            num += os.path.getsize(file_name)
    return num
print(size(os.path.abspath('.')))

计算当前月的1号的时间戳时间

import time
def MonthOne():
    NowTime = time.strftime('%Y-%m',time.localtime(time.time()))
    DayOne = time.strptime(NowTime+'-1','%Y-%m-%d')
    return time.mktime(DayOne)

ret = MonthOne()
print(ret)

正则表达式练习

  1. 匹配整数或者小数(包括正数和负数)
  2. 匹配年月日日期 格式2018-12-6
  3. 匹配qq号
  4. 长度为8-10位的用户密码 : 包含数字字母下划线
  5. 匹配验证码:4位数字字母组成的
  6. 匹配邮箱地址
1. -?\d+(\.\d+)?
2. \d{1,4}-(1[0-2]|0?[1-9])-(3[01]|[12]\d|0?[1-9])
3. [1-9]\d{4,11}
4. \w{8,10}
5. [\dA-Za-z]{4}
6. [\w\-\.]+@([a-zA-Z\d\-]\.)+[a-zA-Z\d]{2,6}

Day16作业及默写的更多相关文章

  1. Day29作业及默写

    作业: 1\ 默写 黏包协议 2\ 上传大文件(文件\视频\图片) 3\ 和你的同桌调通 从你的计算机上传一个视频到你同桌的电脑上 4\ 进阶 : 带上登录 Server #Server #!/usr ...

  2. Day20作业及默写

    1.请使用C3算法计算出链接图中的继承顺序-Link 一 graph BT id1[A]-->id2[B] id2[B]-->id6[F] id6[F]-->id7[G] id1[A ...

  3. Day11作业及默写

    1.写函数,传入n个数,返回字典{'max':最大值,'min':最小值} 例如:min_max(2,5,7,8,4) 返回:{'max':8,'min':2}(此题用到max(),min()内置函数 ...

  4. Day10作业及默写

    1,继续整理函数相关知识点,写博客. 2,写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*number): sum=0 for num in number: sum+=nu ...

  5. Day19作业及默写

    三级菜单 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车 ...

  6. Day14作业及默写

    1.整理今天所学内容,整理知识点,整理博客. pass 2.画好流程图. pass 3.都完成的做一下作业(下面题都是用内置函数或者和匿名函数结合做出): pass 4.用map来处理字符串列表,把列 ...

  7. Day13作业及默写

    1. 整理今天的博客,写课上代码,整理流程图. 博客链接--博客园 2. 写一个函数完成三次登陆功能: 用户的用户名密码从一个文件register中取出. register文件包含多个用户名,密码,用 ...

  8. Day9作业及默写

    1,整理函数相关知识点,写博客. 2,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. def func(obj): return obj[1::2] 3, ...

  9. Day8作业及默写

    1,有如下文件,a1.txt,里面的内容为: 老男孩是最好的培训机构, 全心全意为学生服务, 只为学生未来,不为牟利. 我说的都是真的.哈哈 分别完成以下的功能: 将原文件全部读出来并打印. with ...

随机推荐

  1. XXE漏洞

    原理:XML外部实体注入,简称XXE漏洞,XML数据在传输中数据被修改,服务器执行被恶意插入的代码.当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取.系统命令执行.内网端口探测.攻击内网 ...

  2. 第一阶段——站立会议总结DAY09

    1.昨天做了什么:未做. 2.今天准备做什么:准备将之前讲的东西,要付诸实践.所以,为了使界面更加耐看,向微信,QQ这样的看齐,查一查个人中心界面中间的条条框框的实现代码,借鉴,并运用到自己的代码上. ...

  3. IO多路复用和协程

    1.IO多路复用 作用:检测多个socket是否已经发生变化(是否连接成功/是否已经获取数据) 什么是进程.线程.协程以及它们的区别? 进程是资源分配的最小单元,其作用是进行数据隔离, 线程是cpu调 ...

  4. Hive QL的实例

    1.创建电影评分表 create table film_table ( userid int, movieid int, rating int, unixtime string ) row forma ...

  5. Linux -- 之HDFS实现自动切换HA(全新HDFS)

    Linux -- 之HDFS实现自动切换HA(全新HDFS) JDK规划 1.7及以上  https://blog.csdn.net/meiLin_Ya/article/details/8065094 ...

  6. IntelliJ IDEA下载及安装,破解

    IntelliJ IDEA下载及安装,破解 百度百科:IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助 ...

  7. ActiveMQ producer不断发送消息,会导致broker内存耗尽吗?

    http://activemq.apache.org/my-producer-blocks.html 回答了这个问题: ActiveMQ 5.x 支持Message Cursors,它默认把消息从内存 ...

  8. ScheduledThreadPoolExecutor

    java提供了方便的定时器功能,代码示例: public class ScheduledThreadPool_Test { static class Command implements Runnab ...

  9. BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的pivot元素

    先说快排最坏情况下的时间复杂度为n^2. 正常情况:   最坏的情况下,待排序的记录序列正序或逆序,每次划分只能得到一个比上一次划分少一个记录的子序列,(另一个子序列为空).此时,必须经过n-1次递归 ...

  10. IOS中position:fixed弹出框中的input出现光标错位的问题

    解决方案是 在弹框出现的时候给body添加fixed <style type="text/css"> body{ position: fixed; width: 100 ...