PythonDay6Advance

news/2024/11/29 20:53:47/文章来源:https://www.cnblogs.com/Roxan-bd/p/18577510

PythonDay6Advance

模块、类与对象

模块

  • 内置模块 time, random, os, json
  • 第三方模块 requests, pandas, numpy,....
  • 自定义模块 xxx.py

常见的内置模块

hashlib模块

该模块主要是进行数据加密的作用。

  • 常见的加密方式:sha256()【可逆】 md5()【不

可逆】

import hashlib 
info = '123456' # 创建hashlib中的加密对象 
md5_obj = hashlib.md5() # 设置编码 
md5_obj.update(info.encode('UTF-8')) # 调用函数,开始加密 
mi_wen = md5_obj.hexdigest() 
print(f"明文:{info},通过md5加密后得到密文: {mi_wen}")
# e10adc3949ba59abbe56e057f20f883e

一般情况下,在企业中,若想要对一个明文进行MD5加密的话,一般都不是直接进行加密,而是先对名进行加盐操作,之后才会进行md5加密。

import hashlib 
info = '123456' # 创建hashlib中的加密对象 
md5_obj = hashlib.md5('shujia'.encode('UTF- 8')) # 加盐操作 # 设置编码 md5_obj.update(info.encode('UTF-8')) # 调用函数,开始加密 mi_wen = md5_obj.hexdigest() print(f"明文:{info},通过md5加密后得到密文: {mi_wen}") # 0ead149c250ec554aff85fa083312a83

Json模块

本质上是一个特殊格式的字符串,但是相比较于字符串而言,json是可以通过键获取值的。

判断一个字符串是否符合json的格式:

  • 看字符串是否是由双引号括起来,若不是,那么该字符串转不了json格式数据
  • 若值是由小括号括起来的多个元素,也是不能够转json格式数据的
序列化和反序列化
  • 序列化:将代码中的数据转化成网络中传输的数据流【python中的字典数据 --> json格式的字符串】
dict1 = {'name': '黄沪生', 'age': 18, 'likes': ['踢足球', '钓鱼', '打游戏'], 'pets': [{'name': '小花', 'age': 2},{'name': '小黑', 'age': 3}] 
}
s3 = json.dumps(dict1, ensure_ascii=False) 
print(s3, type(s3))
  • 反序列化:将网络中传输的数据流还原成代码中的数据格式 【json格式的字符串 --> python中的字典数据】
s2 = ''' 
{"name":"黄沪生",
"age":18,
"likes":["踢足 球","钓鱼","打游戏"]} 
''' 
print(s2, type(s2)) 
# print(s2['age']) 
res1 = json.loads(s2) 
print(res1, type(res1)) # {'name': '黄沪生', 'age': 18, 'likes': ['踢足球', '钓鱼', '打游 戏']} <class 'dict'> print(res1['likes']) # ['踢足球', '钓鱼', '打 游戏']

时间相关的模块

time
import time 
res1 = time.time() # 得到的是一个时间戳格式的数据
print(res1, type(time)) # 2024-11-29 10:45:58

时间戳存储时占用的字节相比较于格式化后的字符串而言,是少很多的。

datetime

时间戳,datetime, 格式化日期字符串互相转换

# '2024年11月29日 10时51分00秒' 
# datetime -> str 日期格式化 
res1 = datetime.strftime(s1, '%Y-%m-%d %H:%M:%S')
print(res1) 
print("-------------------------------") 
# time.time() 
# 时间戳 -> datetime 
tp = time.time() # 当前的时间戳 
print(tp) 
res2 = datetime.fromtimestamp(tp) 
print(res2, type(res2)) # datetime -> str 
res3 = datetime.strftime(res2, '%Y/%m/%d %H:%M:%S') 
print(res3, type(res3)) 
print("-------------------------------") 
# 字符串 -> datetime 
s2 = '2024/11/29 11:02:28' 
d2 = datetime.strptime(s2, '%Y/%m/%d %H:%M:%S') 
print(d2, type(d2)) 
# datetime-> 时间戳 
tp2 = d2.timestamp() 
print(int(tp2))

date还有一种方式可以时间获取年月日时分秒, 使用datetime对象中的属性

tp = 1732849348 
dt1 = datetime.fromtimestamp(tp) 
print(f"{dt1.year}年{dt1.month}月{dt1.day} {dt1.hour}时{dt1.minute}分{dt1.second}秒")

OS模块

使用os模块中的功能操作文件或者文件夹

  • 判断目标是否存在
import os # data/user_info 
b = os.path.exists('E:\\projects\\PycharmProjec ts\\bigdata33\\base\\day07\\data\\user_info ')
print(b) # True
  • 路径拼接
s1 = os.path.join('data','user_info1') 
print(s1,type(s1)) 
if os.path.exists(s1): f = open(s1,'r',encoding='UTF-8') text1 = f.read() print(text1) 
else:print("目标路径不存在!")
  • 获取当前文件所在的路径
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件 
print(ml1, type(ml1)) # E:\projects\PycharmProjects\bigdata33\base\ day07\os_demo.py
  • 获取某一个文件所处的父级目录路径
ml2 = os.path.dirname(ml1) 
print(ml2,type(ml2)) # E:\projects\PycharmProjects\bigdata33\base\ day07
  • 判断一个路径是否是文件
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件 
print(ml1, type(ml1)) 
ml2 = os.path.dirname(ml1) 
print(ml2,type(ml2)) 
print(os.path.isfile(ml1)) # True 
print(os.path.isfile(ml2)) # False
  • 判断一个路径是否是文件夹
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件 
print(ml1, type(ml1)) 
ml2 = os.path.dirname(ml1) 
print(ml2,type(ml2)) 
print(os.path.isdir(ml1)) # False 
print(os.path.isdir(ml2)) # True
  • 创建一个文件夹
lj1 = os.path.join('data','aaa') 
os.mkdir(lj1)

注意:

  • 若要创建一个文件夹,使用os模块中的mkdir函数
  • 若要创建一个文件,使用open函数以写的方式打开
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件 
ml2 = os.path.dirname(ml1) 
res1 = os.walk(ml2) 
''' a1: 表示遍历到的文件夹的名称 b1: 表示遍历到的文件夹下所有的文件夹名称组成的列表 c1: 表示遍历到的文件夹下所有的文件名称组成的列表 
''' 
for a1,b1,c1 in res1: print(f"a1:{a1}") print(f"b1:{b1}") print(f"c1:{c1}") print("----------------------")
  • 删除路径

    • 若目标路径是一个文件
    lj1 = os.path.join('data','bbb') 
    os.remove(lj1)
    
    • 若目标文件是一个文件夹
    lj1 = os.path.join('data','aaa') 
    os.rmdir(lj1)
    
  • os模块练习

    • 练习1:企业中有一个网站,每一天都有新的用户注册,要求每一天需要使用一个新的文件存储当天注册的用户信息。
    import os.path 
    import time 
    import utils.login_tool as tool 
    from datetime import datetime 
    # 定义一个全局变量 
    USERS_MU_LU = os.path.join('data','user_regs') 
    def run(): # 判断用户存储信息的文件父级目录是否存在,若不存在创建一个 if not os.path.exists(USERS_MU_LU): os.mkdir(USERS_MU_LU) # 获取当天的时间 # 1732776554 2024-11-28 d = datetime.fromtimestamp(1732776554).strftime('%Y-%m-%d') file_name = os.path.join(USERS_MU_LU, d) if not os.path.exists(file_name): f = open(file_name,'w',encoding='UTF-8') f.close() print("欢迎注册".center(50,'-')) name = input("请输入您要注册的姓名: ")pwd = input("请输入新密码: ") pwd = tool.md5_pwd(pwd) with open(file_name,'a',encoding='UTF-8') as f: f.write(f"{name}|{pwd}\n") f.flush() time.sleep(3)print("用户注册成功!") if __name__ == '__main__': run()
    
    • 加入判断该用户是否在之前已经注册过?融合之前的登录注册案例。
    • 练习2:购票,一个用户购票的记录使用一个文件存储,判断这个用户是否是新用户;不仅可以订票,还可以查看历史记录。
    # 企业中有一个网站,每一天都有新的用户注册,要求 每一天需要使用一个新的文件存储当天注册的用户信息。 
    import os.path 
    import time 
    import utils.login_tool as tool 
    from datetime import datetime
    # 定义一个全局变量 
    USERS_MU_LU = os.path.join('data','user_regs') def run(): # 判断用户存储信息的文件父级目录是否存在,若不存在创建一个if not os.path.exists(USERS_MU_LU): os.mkdir(USERS_MU_LU) # 获取当天的时间 # 1732776554 2024-11-28 d = datetime.fromtimestamp(1732776554).strftime('%Y-%m-%d')file_name = os.path.join(USERS_MU_LU, d)if not os.path.exists(file_name):f = open(file_name,'w',encoding='UTF-8')f.close()print("欢迎注册".center(50,'-')) name = input("请输入您要注册的姓名: ") pwd = input("请输入新密码: ") pwd = tool.md5_pwd(pwd)with open(file_name,'a',encoding='UTF-8') as f: f.write(f"{name}|{pwd}\n") f.flush() time.sleep(3) print("用户注册成功!")if __name__ == '__main__': run()
    

异常

在python程序中出现不正常的情况

python中默认遇到异常的处理方案:抛出错误,程序停止,后续代码不会执行。

异常的分类

  • 语法错误(Syntax errors) 未运行之前出现的错误
    • 会在程序编写的过程中,出现了错误【例如pycharm会在错误的语法下出现红色下划线】
  • 异常(Exceptions)
    • 在程序运行过程中,出现了问题

异常的处理方案

  • try...except...语句
try:list1 = [1, 2, 3] print(list1[7]) 
except: print("出错啦!!!") print("hello world")

try中的代码,若程序运行过程中出错,那么就会执行except中的语句体,若没有出错,except语句体不会执行。不管try中的代码没有出错,整个python程序正常运行。

当try中的代码,若程序运行过程中出错,且try中还有其他的代码的时候,不会执行。

  • try...except...else语句
try:list1 = [1, 2, 3] print(list1[7]) print("黄沪生真帅!") 
except: print("出错啦!!!") else:print("好好学习,天天向上!") print("hello world")

只有当try中的代码不报错的时候,才会执行else中的代码

  • finally子句
try:list1 = [1, 2, 3] print(list1[1]) print("黄沪生真帅!") 
except: print("出错啦!!!") 
else:print("好好学习,天天向上!") 
finally: print("数加666") print("hello world")

无论try中的代码是否报错,finally中的代码都会执行。

finally中一般情况下存放释放资源的代码逻辑

异常的使用场景

异常可以帮助我们替换一些复杂的判断场景

import random 
list1 = ['小虎', '张成阳', '黄涛', '方直', '杨 浩东', '黄沪生', '查镕贤'] 
jiang_xiang = [ ('一等奖', 1, 'mate70 pro'), ('二等奖', 1, '小米手环'), ('三等奖', 2, '按摩仪'), ('四等奖', 2, '京东购物卡')]def chou_jiang(l1): for i, num, goods in jiang_xiang: print(f"正在抽取{i}".center(50, '-')) name_list = random.sample(l1,num) # 将中奖名单从原名单中删除 for n in name_list: if n in l1: l1.remove(n) info = f"恭喜{','.join(name_list)} 中得{i}!!!!" yield infores1 = chou_jiang(list1) 
try:for i in range(len(jiang_xiang)): input(f"开始抽{i+1}等奖....按下回车开 始!") print(res1.__next__()) print(res1.__next__()) 
except: print("所有奖项抽取完毕!!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843667.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

河北公需课代 (可以补)

学时30个,需要联系15689397956

技术框架对MyBatis的入门学习

MyBatis快速入门 在回顾JDBC时,我们已经创建有Maven工程,而且在pom.xml中也已经导入 mysql 依赖包,这里就直接在原有工程上搭建MyBatis环境,以及使用MyBatis来实现JDBC查询user的操作流程。 MyBatis环境搭建 首先,在 Maven 项目的 pom.xml 中添加 MyBatis 的依赖 jar 包 &…

基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM

1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)for t=1:Iterstfor i=1:Numif xwoa(i,1)<0xwoa(i,1)=0.1; endif xwoa(i,2)<0xwoa(i,2)=0.001; end%目标函数更新[pa(i)] = f…

安装苹果系统台式电脑如何正确选购装机硬件

结合自己的一些装机经验和网上查阅的相关资料,给大家安利一波 “ 如何正确选配黑苹果硬件 ” 方面的相关知识。文中配置推介表中的配置都是目前在安装黑苹果上比较常见且稳定的机型,并且EFI引导文件都有现成的,在各大资源网站中也比较好找,能帮助你 快速简单的吃上黑苹果。…

JavaWeb知识点总结

JavaWeb知识点总结和学习笔记目录JavaWebjunit黑盒测试白盒测试注解所需jar包反射作用获取Class对象的方式class对象功能应用注解作用预定义的注解自定义注解解析注解动态代理ProxyMaven作用概述仓库maven依赖仓库:IDEA集成Maven高级功能JDBC概念本质快速入门各个对象抽取JDBC工…

电话号码的字母序列

题目描述 输入一个仅包含数字 2-9 的字符串,输出所有它能表示的字母序列。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入 输入一个包含数字 2-9 的字符串,长度不超过6。 输出 按字典序输出所有能表示的字母序列,每行输出一个。 输入样例 23输出…

IDEA-idea设置导航栏字体大小代码编辑区字体大小

一、设置导航栏字体大小 Setting - Appearance & Behavior - Appearance - Use custom font二、设置代码编辑区字体大小 Setting - Font - Size

Pycharm-Pycharm设置左侧导航栏字体大小和代码编辑区字体大小

一、左侧导航栏字体大小 Setting - Appearance & Behavior - Appearance - Use custom font - Size二、代码编辑区字体大小

DevEco Studio 实战第一节:字符串拼接与组件构建

DevEco Studio 实战第一节:字符串拼接与组件构建 引言 在现代软件开发中,TypeScript 提供了强类型的优势,而 DevEco Studio 作为华为推出的开发集成环境,提供了便捷的代码管理和版本控制功能。本文将通过一个简单的示例,介绍如何在 TypeScript 和 DevEco Studio 中进行字符…

WIN11任务栏右下角wifi、音量、电源三个模块无法弹窗

在平时使用win11电脑时候偶发WIN11任务栏右下角wifi、音量、电源三个模块无法弹窗的问题,一般重启后恢复正常,还有一种方法,打开任务管理器,找到Windows资源管理器选择重新启动,之后就恢复正常啦!代码成就万世基积沙镇海 梦想永在凌云意意气风发

【泛微E9】移动应用将页面按钮置灰

效果如下:实现方法: $load(function() {setTimeout(function() {var kpbm = $f("kpbm").val();var zcbm = $f("zcbm").val();const date = new Date();const year = date.getFullYear();const month = String(date.getMonth() + 1).padStart(2, 0); // 月…

超详细 HarmonyOS 开发教程之开发环境搭建指南

HarmonyOS开发环境搭建指南:DevEco Studio安装教程 一、系统要求 操作系统:Windows 10 64位或更高版本 RAM:至少8GB,推荐16GB 硬盘空间:至少10GB可用空间 处理器:Intel Core i5或更高配置 二、安装步骤 1. 下载DevEco Studio 2. 访问华为开发者联盟官网:https://develop…