1.判断两个大文件是否是同一个文件

import os
import hashlib
import time
start = time.time()
path1 = r"E:\视频资料\elk\1.zip"
path2 = r"E:\视频资料\elk\2.zip"
def file_hash(path):
    file_size = os.path.getsize(path)
    md5 = hashlib.md5()
    with open(path1,'rb') as info:
        while file_size >=8192:
            content = info.read(8192)
            md5.update(content)
            file_size -=8192
        else:
            content = info.read(file_size)
            if content:
                md5.update(content)
    return md5.hexdigest()
# def file_hash(path):
#     md5 = hashlib.md5()
#     with open(path1, 'rb') as info:
#         md5.update(info.read())
#     return md5.hexdigest()
def file(path1,path2):
    return file_hash(path1) ==file_hash(path2)
ret = file(path1,path2)
print(ret)
end =time.time()
print(end-start)

通过制定读取大小计算和直接读取计算的hash是一样的,但是使用时间会有所不同,直接将文件全部读入到内容中会占用时间更长,cpu使用率在一定时间内会飙升!

上面代码刚开始不懂得是:按照指定大写获取到的hash和直接读取到的hash的是一样的么?通过验证确定一样的

#以下两种犯法获取到的"helloworld"的hash是一样的
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)

2.python处理大文件

def func():
    with open('t','r',encoding='utf-8')as f:
        for i in f:
            i = i.strip('\r\n')
            yield i
g = func()
for i in g:
    try:
        print(i)
    except StopIteration:
        # pass
        print(1)

3.模拟微信红包

import random
def red_pac(money,num):
    ret = random.sample(range(1,money*100),num-1)  #取出9个点,乘以100 是考虑小数的情况
    ret.sort()    #将结果从大到小排序
    ret.insert(0,0)
    #为什么将0和100放进去刚开始没想明白,后来发现加上sample的中是分成了9分,加上最小值0和最大值100之后是11个
    #11个数之间两两相减就是10个红包的金额,
    #因为sample是取一个范围之间的不重复数字,所以每个人的概率也是一样的
    ret.append(money*100)
    for i in range(len(ret)-1):
        value = ret[i+1] - ret[i]   #算出相邻节点之间的差,就是红包的金额,ret后一个减去前一个数字加起来除以100正好是100
        yield value/100
g = red_pac(100,10)   #发100块钱,发10个红包
for i in g:
    print(i)

 4.三级菜单

china_ditie = {
    "北京": {
        "一号线": ["四惠", "大望路", "天安门", "西单"],

        "二号线": ["北京站", "朝阳门", "东直门", "西直门"],

        "三号线": ["国贸", "三元桥", "知春路", "巴沟"]

    },
    "上海": {
        "四号线": ["徐家汇", "人民广场", "延长路", "共康路", "呼兰路"],

        "五号线": ["东昌路", "静安寺", "江苏路", "虹桥火车站"],

        "六号线": ["宝山路", "赤峰路", "曹阳路", "虹桥路", "宜山路"]

    },
    "广州": {
        "七号线": ["东山口", "农讲所", "烈士陵园", "公园前", "体育西路"],

        "八号线": ["黄边", "纪念堂", "三元里", "白云公园"],

        "九号线": ["沙河顶", "北京路", "一德路", "文化公园"]

    },
    "深圳": {
        "一号线": ["高新园", "桃园", "白石洲", "华侨城"],

        "四号线": ["白石龙", "明乐", "少年宫", "红山"],

        "五号线": ["大学城", "兴东", "西里", "深圳北站"]

    },
}

字典

for item in china_ditie:  #取出整个字典中的key,然后循环
    print(item)
key1 = input('>>>')       #接收的是循环出来的key,然后循环这个key所对应的值
for item1 in china_ditie[key1]:
    print(item1)
key2 = input('>>>')
for item2 in china_ditie[key1][key2]:
    print(item2)

#字典有几层,就应该有几个for循环

方法一

l = [china_ditie]
while l:
    for item in l[-1]:
        print(item)
    name = input(">>>")
    if name.upper() == "Q":
        l.clear()
    elif name.upper() == "B":
        l.pop()
    else:
        if l[-1].get(name):
            l.append(l[-1][name])
'''
这个解法是使用列表的pop()方法和append()方法,实现了一个简单的栈操作
将字典添加到列表里面,通过l[-1]取出字典,并将其键打印到屏幕上,通过用户输入的来判断
是否是屏幕上打印的出来的字符串,如果不是就让用户重新输入,如果是的话
就验证l[-1]中原始的字典中是否有这个键,如果有这个键,就将这个键所对应的二层字典加入到l列表中,这样l列表就有
两个以字典为元素的值了。在通过while循环取出l[-1]元素,就是我们刚刚添加进去的二层字典进行显示
如果输出b则返回上一层,就删除l[-1]这个列表中最后面的字典。就能显示其上一层。

主要是用列表的方法实现了后进先出的特点,当显示到最后n层的时候,列表里面就会有n个以字典为元素的值
'''

方法二

 5.计算文件夹大小

import os
def get_zise(path):
    li = [path]
    file_size = 0
    while li:
        path = li.pop()
        dirs = os.listdir(path)
        for item in dirs:
            path_dir = os.path.join(path,item)
            if os.path.isfile(path_dir):
                file_size +=os.path.getsize(path_dir)
            else:
                li.append(path_dir)
    return file_size
ret = get_zise(r'E:\oldboy\python 20\讲课\day01')
print(ret)

 6.python编写计算器

#^尖括号在[]里面表示非
def chengchu(res):
    if '*' in res:
        a,b = res.split('*')
        return str(float(a)*float(b))
    else:
        a, b = res.split('/')
        return str(float(a) / float(b))
import re
exp = '1 - 2 * ( (60-30 + (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )*(-40/5)) - (-4*3)/ (16-3*2) )'
exp =exp.replace(" ",'')

def format_exp(exp):
    '''
    完成表达式格式整理,将一些叠在一起的符号整理成一个符号
    :param exp: str数据类型的表达式 '1.23++3+-4--5'
    :return: 整理之后的str数据类型的字符串,'1.23+3-4+5'
    '''
    exp = exp.replace('++','+')
    exp = exp.replace('-+','-')
    exp = exp.replace('+-','-')
    exp = exp.replace('--','+')
    return exp
'''
#匹配出扩号最里面的表达式,(9-2*5/3+7/3*99/4*2998+10*568/14)
'''
ret = re.search('\([^()]+\)', exp)    #(9-2*5/3+7/3*99/4*2998+10*568/14)
ret5 = ret.group()
while True:
    '''
    \d+(\.\d+)?[*/]-?\d+(\.\d+)?
    \d+(\.\d+)?:匹配整数和小数,小数出现0次或1次
    [*/]:匹配乘法和除法
    -?\d+(\.\d+)?:匹配负数和负小数
    '''
    ret1 = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',ret5)     #列出每一个乘除式子 2*5
    if ret1:
        ret2 = chengchu(ret1.group())                                      #计算每一个乘除10
        ret5 =ret5.replace(ret1.group(),ret2)
        no_bracket_exp = format_exp(ret5)
        # 再计算加减法
        res_lst = re.findall('[-+]?\d+(?:\.\d+)?', no_bracket_exp)
        sum_n = 0
        for i in res_lst:
            sum_n += float(i)
        print (sum_n)
    else:
        break

#有的时候,往往取不到变量的名字
#通过变量的字符串的名字,可以通过反射获取

返回系列

python 不知道是啥的更多相关文章

  1. 想学Python不知道从哪里开始学?|百度网盘免费下载| 这本入门书了解下

    百度网盘免费下载:编程小白的第一本 Python 入门书 提取码:s0pc Python是什么 Python是一种计算机程序设计语言,由吉多·范罗苏姆创造,第一版发布于1991年,可以视之为一种改良的 ...

  2. 初学Python不知道做什么项目好?来看看练手项目如何?

    对于初学者来说,在学习编程的初期,由于基础知识点的学习是比较无聊的,所以大家可能会有所反感,为了减弱大家的反感,我给大家带来一个简单的小项目——实现屏保计时器,这个项目就算是刚学Python的小伙伴, ...

  3. arcgis python 不知道一个工具怎么用

    完整的工具帮助信息 import arcpy print(arcpy.Usage("Buffer_analysis")) print(arcpy.Usage("MakeF ...

  4. Python 学习拾遗

    该博文主要适应于python2.7,并没有对py3进行测试. 主要记录学习python过程中容易出现的一些小问题.小错误,相信能给你启发. 1.剔除一个字符串中的所有空格(假设该字符串是s) &quo ...

  5. <转>Python的内存泄漏及gc模块的使用分析

    一般来说在 Python 中,为了解决内存泄漏问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收.由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为自己从此过上了好日子,不必再受内 ...

  6. 在大型项目上,Python 是个烂语言吗

    Robert Love, Google Software Engineer and Manager on Web Search. Upvoted by Kah Seng Tay, I was the ...

  7. hadoop streaming编程小demo(python版)

    大数据团队搞数据质量评测.自动化质检和监控平台是用django,MR也是通过python实现的.(后来发现有orc压缩问题,python不知道怎么解决,正在改成java版本) 这里展示一个python ...

  8. Python的列表

    1. Python的列表简介 1. 1 列表的定义 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 ,即它的 ...

  9. Python的变量及简单数据类型

    Python的变量及简单类型 1.  变量 在Python编程中,变量是用来存放值或对像的容器.变量的名称可以自定义,但需遵循一定的规范,否则可能会引发一些错误.Python的变量可以分为数字.字符和 ...

随机推荐

  1. laravel 黑名单功能实现

    创建黑名单表迁移:php artisan make:model Models/BlackFeeds -m    (生成模型和迁移文件) 迁移文件中创建如下字段: public function up( ...

  2. Visual Studio 2013 突然不高亮,编译报错

    同事的电脑,估计是windows更新失败的原因,C盘容量减小到不到1G,VS的高亮也坏了,重启后硬盘容量增加了但是仍然不高亮. 解决办法记录一下: 重置下. 开始菜单 -->所有程序--> ...

  3. ExtJs5的基本理论概念

    概述 理解ExtJs里面的一些基本关键字的概念是使用ExtJs搭建MMVC框架的基础,在ExtJs中,我们通常遇到ExtJs的配置和启动项Ext.application(),该方法是ExtJs程序初始 ...

  4. 服务器资源监控插件(jmeter)

    零.引言 我们对被测应用进行性能测试时,除了关注吞吐量.响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过 实时监控,可以准确的把握不同测试场景下服务器资源消 ...

  5. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第八周学习总结 概述 Generalization 本周学习了二叉树的另一种有序扩展?是什么呢?你猜对了!ヾ(◍°∇°◍) ...

  6. NOIP2011 D2T3 观光公交 做题笔记

    目录 归纳题目的性质 算法 60分 100分 code 大家来找茬 总结 归纳题目的性质 每一个加速器效果相同(1) 车子等到所有人上车之后才会发车, 这个最早发车时间不由加速器的配比决定(2) 要优 ...

  7. windows下安装 mysql 8.0 以上版本以及遇到的问题

    Windows 上安装 MySQL Windows 上安装 MySQL 相对来说会较为简单,地那就链接 https://cdn.mysql.com//Downloads/MySQL-8.0/mysql ...

  8. BOM 浏览器对象模型_渲染引擎_JavaScript 引擎_网页加载流程

    1. 浏览器核心的两个组成部分 渲染引擎 将网页代码渲染为用户视觉可以感知的平面文档 分类: Firefox        Gecko 引擎 Safari        WebKit 引擎 Chrom ...

  9. 螺旋矩阵 java实现(待消化)

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/4 17:13 * @description ...

  10. 我了解到的新知识之----如何使用Python获取最新外汇汇率信息

    这个需求本来是来源于公司同事工作中需求,用户需要使用数据分析工具Power BI抓取多页的中国银行官网上当天的外汇数据.但是没能研究出来. 我就开始在网络上找关于使用python来抓取当天汇率的案例分 ...