14模块
为什么要使用模块?
1、从文件级别组织程序,更方便管理 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用
2、拿来主义,提升开发效率 同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率,避免重复造轮子。
import 翻译过来是一个导入的意思
模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行
(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:
第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句),
如下
import spam #只在第一次导入时才执行meet.py内代码,此处的显式效果是只打印一次'from the meet.py',当然其他的顶级代码也都被执行了,
只不过没有显示效果.
# 总结:
# json.load() #参数文件句柄(r), 将文件中字符串转换成字典
# json.dump() #对象(字典),文件句柄(w) 将字典转换字符串写入到文件中
# json.dumps() #对象(字典) 将字典转换成字符串
# json.loads() #字符串(字典) 将字符串转换成字典
# 1.用于多种语言交互 编程语言通用数据 # 内置的 不需要安装 直接导入使用 import json # 导入一个json模块 # dumps loads # dump load 有持久化的功能 # dic = {'1':2} # s = json.dumps(dic) # 将字典对象转换成字符串 # print(type(s)) # di = '{"1":2}' # d = json.loads(di) # 将字符串转换成字典 # print(d) # print(type(d)) # json.dump({'1':4},open('a','w',encoding='utf-8')) # d = json.load(open('a','r',encoding='utf-8')) # d['1'] = 10 # print(d) # json.dump(d,open('a','w',encoding='utf-8')) # d = json.load(open('a','r',encoding='utf-8')) # print(d)
pickle 只支持python
# 总结: # josn,pickle 对比
# loads json里的将字符串转换成字典 pickle 将字节转换成字典 # dumps json里的将字典转换成字符串 pickle 将字典转换成字节 # load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典 # dump json里的将字典转换字符串写入到文件中,pickle 将字典转换成字节写入到文件中
# 1.pickle 只支持python # dumps loads # dump load 持久化 import pickle # print(pickle.dumps({'1':4})) #将对象转换成类似二进制的东西 # print(pickle.loads(b'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.')) # 将一个堆类似于二进制的东西转换成字典 # pickle.dump({'2':4},open('b','wb')) # d = pickle.load(open('b','rb')) # print(d) # 总结: # josn,pickle 对比 # loads json里的将字符串转换成字典 pickle 将字节转换成字典 # dumps json里的将字典转换成字符串 pickle 将字典转换成字节 # load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典 # dump json里的将字典转换字符串写入到文件中,pickle 将字典转换成字节写入到文件中
# ATM
# d = json.load(open('a','r',encoding='utf-8')) # print(d)
# d['money'] += 500
# print(d)
# d['money'] -= 100
# import json # d = json.load(open('a','r',encoding='utf-8')) # print(d)
# import shelve
# 序列化: # 1.文件 + 字典操作 # import shelve # f = shelve.open('c',writeback=True) #创建文件 # writeback = True 回写 # f['name'] = 'alex' # # f['age'] = 18 # # print(f['name'],f['age']) # f['name'] = ['alex','wusir'] # # print(f['name']) # print(f) # 这样是查看不了字典 # for i in f: # print(i) #获取到所有的键 # print(f.keys()) #keys也不行 # for i in f: # print(f[i]) # dump load 咱们不用写,自动帮咱们写的 # f['name'] = {'2':4} # print(f['name']) # for i in f: # print(i) # 注意:以后你们会出现一个问题,咱们对字典的操作内容,有时候写不进去.在open # print(f['name']) # f['name'] = 'wusir' # print(f['name']) # {'2':4} # f['name'] = [1,2,34] # print(list(f.keys())) # json 最常用,前后端分离的时候数据交互 前后端分离 必回 # pickle python 不怎么常用 河南方言 必了解 # shelve 建议使用它,它简单 重庆,东北,容易学 必了解
随机数
import random # 内置的
# 随机数 import random # 内置的 # print(random.random()) # 0-1 之间随机小数 # print(random.randint(1,10)) # 起始位置,终止位置 两头都包含 # print(random.randrange(1,21,2)) # 起始位置,终止位置(不包含),步长 # print(random.choice(['alex','wusir','eva_j'])) # 从有序数据结构中随机选择一个 # print(random.choices(['wusir','tialaing','taihei','ritian'],k=2)) # 随机选择两个,但是有重复 # print(random.sample(['wusir','tialaing','taihei','ritian'],k=2)) # 随机选择两个,没有重复 # li = [1,2,3,4,6] # random.shuffle(li) # 洗牌 打乱顺序 # print(li) # 随机数 验证码 微信红包 # print(chr(65),chr(90),chr(97),chr(122)) # U = chr(random.randrange(65,91)) # L = chr(random.randrange(97,123)) # n1 = random.randrange(0,10) # n2 = random.randrange(0,10) # print(U, L,n1,n2)
# 1.os模块和当前电脑操作系统做交互
# 1.os模块和当前电脑操作系统做交互 # os 内置模块 # 文件夹: import os # os.makedirs('app/a/b/c') # 递归创建文件 *** # os.removedirs('app/a/b/c') # 递归删除文件, 当这个要删除的目录有文件就停止删除 *** # os.mkdir('app') # 创建单个目录 *** # os.rmdir('app') # 删除单个目录,目录如果有东西就报错不进行删除 *** # print(os.listdir('D:\PyCharmProject\s20\day14')) **** # 查看某个目录下的内容 # 文件: # os.remove() #删除这个文件,删除了就不能恢复了 ***** # os.rename() #修改文件的名字 ***** # 操作系统: # print(repr(os.sep)) #\\ # C:\Users\lucky\Documents\Tencent Files\932023756\FileRecv # 路径符号 # print(repr(os.linesep)) # 换行符 # print(repr(os.pathsep)) # 环境变量的分割 # print(repr(os.name)) # print(os.system('dir')) # print(os.popen('dir').read()) *** # 在写程序的时候可以下发一些操作系统的指令 # 在linux系统上相当于发shell命令 # print(os.environ) 查看 高级 -- 环境变量 -- path * # 路径: # print(os.path.abspath('b')) **** # 获取当前文件的绝对路径 # print(os.path.split(r'D:\PyCharmProject\s20\day14\b')) # 将这个文件的绝对路径分成目录和文件 # print(os.path.basename(r'D:\PyCharmProject\s20\day14\b')) ** # 获取的是这个文件的名字 # print(os.path.dirname(r'D:\PyCharmProject\s20\day14\b')) *** # 获取的是这个文件的目录路径 # print(os.path.exists(r'D:\PyCharmProject\s20\day10\07 今日总结.py')) ** # 判断这个文件是否存在 # print(os.path.isabs(r'D:\PyCharmProject\s20\day14\b')) # 判断是否是绝对路径 # print(os.path.join('C:\\','app','a','b')) ***** # #路径拼接的 软件开发规范 框架 # os.stat() # print(os.stat('b').st_size) #获取文件大小 ,坑目录 *** # print(os.getcwd()) # 获取工作路劲 *** # os.chdir('D:\PyCharmProject\s20\day13') # 路劲切换 * # print(os.getcwd())
# 1. sys模块 python解释器交互的
# 1. sys模块 python解释器交互的 # sys 内置的 import sys # print(sys.argv[-1]) *** # 接受cmd方式调用 后边的参数会传递进来 # linux系统上 -- 后端开发 -- 数据库(文件) ip + 端口 # print(sys.path) # 添加自定义模块路劲的 # ****** # print(sys.version) # 版本 获取解释的版本号 # sys.platform = 'win1988' # print(sys.platform) #获取当前操作系统的平台位数 # 不是定死的 # print(sys.exit(1))
# 1.# 加密算法
# 1.# 加密算法 # 作用: 当做密码 # 判断一致性 # 2.加密后不可逆 不能解 (一年前暴力破解 -- 撞库) # (现在md5 反推) # 3.sha1,sha256,sha512 # alex3714 # ********** # import hashlib # md5 = hashlib.md5('盐'.encode('utf-8')) # 选择加密方式 加盐 # md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密 # print(md5.hexdigest()) # 生成密文 # md5 = hashlib.md5() # 选择加密方式 加盐 # md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密 # print(md5.hexdigest()) # 生成密文 # sha512 = hashlib.sha512() # sha512.update('alex3714'.encode('utf-8')) # print(sha512.hexdigest()) # # sha512 # 优点: # 安全 # 缺点: # 慢 # # # md5 # 优点: # 安全,快 # 缺点: # 容易破解 # user,pwd = input('user|pwd:').strip().split('|') # import hashlib # # md5 = hashlib.md5(str(user).encode('utf-8')) # md5.update(pwd.encode('utf-8')) # print(md5.hexdigest()) # md5,sha1,sha256,sha512
# 1.序列化 # json # 必会 # dump 把字典转成字符串存入文件 # load 将文件的字符串转成字典 # dumps 将字典转成字符串 # loads 将字符串转成字典 # pickle # 了解 # shevle # 了解 # 2. 随机数 # random.random() 0-1 之间的小数 # 验证码 # random.randint(1,10) # 3. os 操作系统 # 路径部分 # os.path.join # os.path.abspath # os.path.basename # os.path.dirname # os.path.getsize() # 获取大小 # os.remove() # os.rename() # os.listdir() # os.chdir() # 切换目录 # os.makedirs('app/a/b') 递归创建文件夹 # os.removedirs('app/a/b') 递归删除 # os.mkdir() 创建单个文件夹 # os.rmdir() 删除单个文件夹 # sys python解释器 # sys.argv() 在cmd中执行 可以将文件 后的内容传递到文件中使用 # sys.path python解释器加载的路径,自定义模块添加到这里 # sys.exit() # sys.version() 获取解释器的版本号 # sys.platform 获取当前平台的位数 # hashlib 加密算法 # md5,sha1,sha256,sha512 # 1.先导入模块 # 2.创建一个加密方式 # 3.将要加密的内容编码成字节后加密 # 4.生成密文 # import hashlib # md5 = hashlib.md5(b'alex') # md5.update('alex3714'.encode('utf-8')) # print(md5.hexdigest())
模块
序列化
json
1.用于多种语言交互 编程语言通用数据
内置的 不需要安装 直接导入使用
import json 导入一个json模块
dumps loads dump load
json.load() 参数文件句柄(r) 将文件中字符串转换成字典
json.dump() 对象(字典),文件句柄(w) 将字典转换字符串写入到文件中
json.dumps() 对象(字典) 将字典转换成字符串
json.loads() 字符串(字典) 将字符串转换成字典
pickle
只支持python
dumps loads
dump load 持久化
2
shelve
- 文件+字典操作
随机数
import random 内置的
print(random.random()) 0-1之间随机小数
print(random.random(1,10)) 起始位置,终止位置 两头都包含
print(random.random(1,11,2)) 起始位置,终止位置(不包含),步长
print(random.choice([1,2,2])) 从可迭代、有序对象中随机选
print(random.choices([1,2,3],k=2)) 选择两个,但有重复
print(random.sample([1,2,3],k=2)) 选择两个,没有重复
li=[1,2,3,4,6]
random.shuffle(li) 洗牌 打乱顺序
print(li)
随机数 验证码 微信红包
文件:
import os
os.makedirs(‘app/a/b/c’) 递归创建文件
os.removedirs(‘app/a/b/c) 递归删除文件,当这个要删除的目录有文件就停止删除
os.mkdir(‘app’) 创建目录
os.rmdir(‘app’) 删除单个目录,如果有东西就报错,不删除
今日必会
1.序列化
json必会
pickle了解
shelve了解
- 随机数
验证码
random.random() 0-1之间的小数
random.randint(1,10)
- os
- os.path.join
- os path.abspath
- os.path.basename
- os.path.dirname
- os.path.getsize() 获取大小
- os.remove()
- os.rename()
- os.listdir()
- os.chdir() 切换目录
- os.mkdirs() 递归创建文件夹
- os.rmdir()
sys 和python解释器做交互
sys.argv() 在cmd中执行,可以将文件后的内容传递到文件中使用
sys.path python解释器加载的路径,自定义模块添加到这里
sys.version() 获取解释器的版本号
sys.platform 获取当前平台的位数
hashlib 加密算法
md5,sha1,sha256,sha512
- 先导入模块
- 创建一个加密方式
- 将要加密的内容编码成字节后加密
- 生成密文
import hashlib
md5 = hashlib.md5(b‘alex’)
md5.update(‘alex3714’.encode(‘utf-8’))
print(md5.hexdigest())