python 不知道是啥
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 #有的时候,往往取不到变量的名字 #通过变量的字符串的名字,可以通过反射获取
7.centos7安装python3
1.yum源是支持python3.6,命令yum install -y python36
2.安装环境工具即可
yum install -y python36-setuptools
yum install -y python36-pip
8.源码安装python3以及虚拟环境

1.得先编译安装python3 https://www.cnblogs.com/pyyu/p/7402145.html 2.安装编译所需的开发环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y 3.下载python3的源代码 wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz xz -d Python-3.6.7.tar.xz tar -xf Python-3.6.7.tar 4.对源代码解压缩 xz -d Python-3.6.7.tar.xz tar -xf Python-3.6.7.tar 5.切换进入源码 cd Python-3.6.7 6.开始编译三部曲了 第一曲:指定软件安装位置 [root@s24_linux Python-3.6.7]# ./configure --prefix=/testlalal/python367/ 第二曲:开始编译 make 第三曲:编译安装,生成最终的可以使用的python3.6.7的解释器 make install 7.配置PATH环境变量,可以直接输入python3就进入/testlalal/python367/bin/python3 向要永久生效,配置环境变量,编辑/etc/profile 文件,开机就会读取这个文件中的所有变量定义 vim /etc/profile 写入PATH变量的值修改 PATH="/testlalal/python367/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" 8.退出回话,重新登录linux,即可加载新的PATH 9.安装virtualenvwrapper工具 pip3 install -i https://pypi.douban.com/simple virtualenvwrapper 10.升级pip3版本命令 pip3 install --upgrade pip 11.配置环境变量,加载虚拟环境工具 vim /etc/profile 写入如下配置 WORKON_HOME=~/Envs #设置virtualenv的统一管理目录 VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境 VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 #指定python解释器 source /usr/local/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本 12.重新登录后,生效配置 exit 13.使用虚拟环境命令,创建新的虚拟环境用于运行项目 [root@s24_linux ~]# mkvirtualenv s24666 [root@s24_linux ~]# mkvirtualenv s24888 14.可以用workon命令切换不同的虚拟环境 15.上传本地开发好的代码,到linux服务器上,安装lrzsz传输工具,用于windows和linux传递文件 yum install lrzsz -y 16.压缩windows环境开发的代码,传递至服务器 rz #直接输入此命令,接受windows的代码 16.安装项目运行所需的所有模块 1.导出windows的模块 pip3 freeze > requirements.txt 2.在linux 上安装此文件,自动读取文件中所有的模块版本信息 pip3 install -r requirements.txt 3.也可以用土方法,解决环境依赖问题 pip3 install -i https://pypi.douban.com/simple django==1.11.9 pip3 install -i https://pypi.douban.com/simple pymysql pip3 install -i https://pypi.douban.com/simple django-multiselectfield 17.解决数据库问题,启动数据库 yum install mariadb-server mariadb -y #安装数据库 systemctl start mariadb #启动数据库 18.检查mysql是否启动 查进程 ps -ef |grep mysql 查端口 (s24888) [root@s24_linux IGnb]# netstat -tunlp |grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 27687/mysqld 查看mariadb数据库的服务状态 systemctl status mariadb 19.尝试再次启动项目,是否正常 可能还会遇见密码不一致的问题,需要修改settings.py linux的ip地址:192.168.16.85 127.0.0.1 0.0.0.0(绑定这台机器所有的ip地址) 存在多个网卡 windows的ip地址:192.168.16.64 127.0.0.1 0.0.0.0 20.修改django的配置文件settings.py修改ALLOW_HOSTS=['*'] 21.启动django程序 python3 manage.py runserver 0.0.0.0:8000 22.运行bighg项目,上传bighg代码到linux服务器,解决项目运行所需的依赖 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.11 python3 manage.py runserver pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple channels python3 manage.py runserver pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple gitpython pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple paramiko 23.在linux上安装git yum install git -y 24.再次运行项目,代码发布启动 python3 manage.py runserver 0.0.0.0:9000
python垃圾回收机制
https://www.cnblogs.com/webber1992/p/6597245.html https://www.cnblogs.com/hackerl/p/5901553.html https://my.oschina.net/hebianxizao/blog/59896 https://www.cnblogs.com/webber1992/p/6597245.html
python程序的执行过程
https://www.cnblogs.com/p0st/p/11245195.html
python包的导入
https://blog.csdn.net/weixin_38256474/article/details/81228492
Python虚拟机
https://www.cnblogs.com/webber1992/p/6597166.html
返回系列
上帝说要有光,于是便有了光;上帝说要有女人,于是便有了女人!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类