Python中的模块
在Python中模块的应用
在Python里面,常用的库分为如下两类:
1、标准库:安装了Python的解释器,解释器内部需要自己带动的
2、第三方的库:由很多顶级程序员开发的,需要额外的安装
1.os模块主要是对路径的处理
1.1.获取当前的路径以及获取当前路径的上一级目录
1 import os 2 # #获取当前路径 3 print(os.path.dirname(__file__)) 4 # #获取当前路径的上一级目录 5 print(os.path.dirname(os.path.dirname(__file__)))
1.2.输入控制台的命令
1 import os 2 #输入控制台的命令 3 print(os.system('date'))
1.3.获取目录下所有的文件 c:/
1 import os 2 for item in os.listdir('c:/'): 3 print(item)
1.4.获取目前使用的操作
1 import os 2 print(os.name)
1.5.路径的拼接--。自动获取路径
1 import os 2 base_dir=os.path.dirname(os.path.dirname(__file__)) 3 4 logPath=os.path.join(base_dir,'ui测试','log.txt') 5 f=open(logPath,'r',encoding="utf-8") 6 print(f.read()) 7 f.close()
2.time模块:time模块提供了各种与时间相关的库
2.1time模块相关的代码
1 import time as t 2 # 3 # 4 print('获取时间戳:',t.time()) 5 print('获取当前时间的字符串格式',t.ctime()) 6 print('时间戳转为字符串:',t.ctime(t.time())) 7 print('时间戳转为struct_time:',t.gmtime(t.time()).tm_year) 8 print('时间戳转为本地的时间:',t.localtime(t.time())) 9 print('获取中国的时间:',t.strftime('%y-%m-%d %H:%M:%S',t.localtime()))
3.datetime模块:相比于time模块而言,会更加直观 同样表示的也是时间
1 import datetime 2 import time 3 4 print('获取当前时间:',datetime.datetime.now()) 5 print('时间戳转换格式:',datetime.datetime.fromtimestamp(time.time())) 6 print('在当前基础上增加或者减少:',datetime.datetime.now()+datetime.timedelta(minutes=2)) 7 # 小时分钟秒是需要复数的形式 8 9 print('获取当前时间:',datetime.datetime.now()) 10 11 from datetime import datetime 12 13 print(datetime.now())
需要注意的一点#在datetime模块里面 增加或者减少的时间在英文书写的时候需要复数的形式
4.json的模块:序列化以及反序列化
首先我们需要了解python中json模块序列换以及反序列化的含义
序列化:把内存里的数据类型转为字符串的数据类型,使能够存储到硬盘或通过网络传输到远程
因为硬盘或者网络传输时只接受bytes的数据类型。简单的说就是把Python的数据类型(字典,元组,列表)转化成str的数据类型过程
反序列化:就是str的数据类型转为Python对象的过程。
'''
关于序列化和反序列化的代码结构
dumps():对Python对象(list,tuple,dict)进行序列化
loads():对Python对象(list,tuple,dict)进行反序列化
传输用的时候
dump():对文件进行序列化(本质上把内容写到文件里面)
load():对文件进行反序列化(本质上是读取文件里面的内容)
'''
4.1列表的序列化与反序列化
1 list1=[x for x in range(10)] 2 # 序列化 3 listStr=json.dumps(list1) 4 print(listStr) 5 print(type(listStr)) 6 7 # #反序列化 8 steList=json.loads(listStr) 9 print(steList) 10 print(type(steList))
4.2元祖的序列化与反序列化
需要注意的是,元组进行序列化和反序列化,将原有类型改为str/list数据类型、
1 tuple1=(1,2,3) 2 3 # #序列化 4 tupleStr=json.dumps(tuple1) 5 print(tupleStr) 6 print(type(tupleStr)) 7 8 # #反序列化 9 strTuple=json.loads(tupleStr) 10 print(strTuple) 11 print(type(strTuple))
4.3字典的序列化和反序列化
1 dict1={'name':'jiachao','age':28} 2 3 #序列化 4 dictStr=json.dumps(dict1) 5 print(dictStr) 6 print(type(dictStr)) 7 8 #反序列化 9 strDict=json.loads(dictStr) 10 print(strDict) 11 print(type(strDict))
4.4文件的序列化和反序列化 其他类型的反序列化为loads 而文件为load
1 dict1={'name':'jiachao','age':28} 2 #文件的序列化 3 json.dump(dict1,open('world.txt','w')) 4 5 #文件的反序列化 6 print(json.load(open('world.txt','r')))
5.sys模块相关知识
sys模块提供对解释器使用或维护的一些变量以及与解释器强烈交互的函数的访问
5.1查看解释器的版本以及查看当前的操作系统
1 import sys 2 print('查看解释器的版本:',sys.version) 3 print('查看操作系统:',sys.platform)
在工作或者写代码的阶段,当导入方式是正确的,但是提示模块不存在,那么这个时候我们可以使用sys来解决,解决的思路是:
1、把不存在模块的路径添加到sys执行的路径中
2、在进行调用模块里的函数
1 import os 2 3 base_dir=os.path.dirname(os.path.dirname(__file__)) #获取当前目录 4 loginPath=os.path.join(base_dir,'个人练习用') #将'个人练习用',base_dir 拼接到 loginPath 5 print(loginPath) 6 #添加到sys.path里面 7 sys.path.append(loginPath) 8 from login import * #调用login模块里的函数 9 10 func()
在上述代码中步骤方法为
1、先获取当前目录
2、将两个目录进行拼接,使其整合成一个新的目录
3、将该目录添加到sys.path里面
4、调用相关模块里的函数
6.hashlib模块:主要涉及md5的加密算法
hashlib里面主要会涉及到md5的加密算法
open api:开放平台的接口
6.1关于open api的加密思路
具体思路如下:
1、对请求参数进行排序,根据key来进行排序
2、把请求参数处理成key=value&key=value
3、对请求参数进行md5进行加密(加密的数据类型必须是bytes的数据类型)
4、把加密后的sign当请求头给服务端,服务层进行比较,如果一致可以请求,如果不一致拒绝请求
备注:md5加密 原则上来说是不可以进行解密的 有的网站可以进行解密(几率问题存在)
以下为代码 :
1 import hashlib 2 import time 3 from urllib import parse #从包里面导入模块 4 5 6 def sign(): 7 dict1={'name':'jiachao','age':21,'salary':'1009.2','time':time.time()} #加时间戳是为了转换md5时变成随机生成 8 #对请求参数进行排序,根据key来进行排序 9 data=dict(sorted(dict1.items(),key=lambda item:item[0])) 10 #把请求参数处理成key=value&key=value 11 data=parse.urlencode(data) 12 #获取到md5的对象 13 m=hashlib.md5() 14 #把str转为bytes的数据类型的过程,以及进行具体的加密 15 m.update(data.encode('utf-8')) 16 return m.hexdigest() 17 print(sign())
从上述代码中 我们可以看到
要做的就是先进行字典的排序 然后将请求参数进行更改 紧接着获取md5的对象 将str转为bytes数据类型,以及具体的加密