Learn day6

1.模块

1.1 pickle模块
# ### pickle 序列化模块 import pickle """ 序列化: 把不能够直接存储的数据变得可存储 反序列化: 把数据恢复成原本的数据格式 serialize 序列化 unserialize 反序列化 """ # 正常情况下,不能够直接把容器类型数据等直接存储在文件当中 """ with open("ceshi.txt",mode="w",encoding="utf-8") as fp: lst = [1,2,3] fp.write(lst) """ #dumps 把任意对象序列化成一个bytes lst = [1,2,3,4,5] res = pickle.dumps(lst) print(res) #loads 把任意bytes反序列化成原来数据 res = pickle.loads(res) print(res,type(res)) # 序列化函数 def func(): print("我是一个函数") res = pickle.dumps(func) print(res) # 反序列化函数 func = pickle.loads(res) func() # 序列化迭代器 from collections import Iterator,Iterable it = iter(range(10)) print(isinstance(it,Iterator)) res = pickle.dumps(it) print(res) res = pickle.loads(res) print(res) for i in res: print(i) # dumps 和 loads 把数据存储在文件 setvar = {"a","b"} with open("ceshi.txt",mode="rb+") as fp: res = pickle.dumps(setvar) fp.write(res) # 读取内容的时候,先把光标移动的文件行首. fp.seek(0) res2 = fp.read() print(res2) setvar = pickle.loads(res2) print(setvar,type(setvar)) #dump 把对象序列化后写入到file-like Object(即文件对象) def func2(): print("我是func2") with open("ceshi02.txt",mode="wb") as fp: # 参数1:要序列化的数据 参数2:对应的文件对象 pickle.dump(func2,fp) #load 把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据 with open("ceshi02.txt",mode="rb") as fp: func = pickle.load(fp) # 调用函数 func() # pickle模块可以序列化所有的数据类型.

1.2 json模块

# ### json
import json
"""
json可以序列化数据,转化成一个字符串.
json格式的数据,可以让所有的编程语言都能够识别,
有数据类型的限制:bool float int list tuple dict str None
"""

# 第一组:dumps 和 loads 用来序列化或反序列化字符串
"""
ensure_ascii=True 是否显示中文 设置ensure_ascii=False 显示中文
sort_keys=True 对字典的键按照ascii进行排序
"""
dic = {"name":"李祖清","age":58,"sex":"man","family":["爸爸","妈妈","姐姐","妹妹"]}
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res,type(res))

dic = json.loads(res)
print(dic,type(dic))

# 第二组: dump 和 load 用来对数据进行存储
dic = {"name":"李祖清","age":58,"sex":"man","family":["爸爸","妈妈","姐姐","妹妹"]}
with open("ceshi03.json",mode="w",encoding="utf-8") as fp:
json.dump(dic,fp,ensure_ascii=False)

with open("ceshi03.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)

print(dic,type(dic))

# json 和 pickle 两个模块的区别?

# json 用法特征:
"""
json 可以连续dump,但是不能连续load
load 只可以load一次,它是一次性把所有的数据作为一个整体来进行转化
可以使用loads 来进行解决
"""
dic1 = {'a':1,"b":2}
dic2 = {"c":3,"d":4}

with open("ceshi04.json",mode="w",encoding="utf-8") as fp:
json.dump(dic1,fp)
fp.write("\n")
json.dump(dic2,fp)
fp.write("\n")

# error 只能load一次,是一次性把所有数据转化.
"""
with open("ceshi04.json",mode="r",encoding="utf-8") as fp:
res = json.load(fp)
print(res)
"""
# 解决方式
with open("ceshi04.json",mode="r",encoding="utf-8") as fp:
for line in fp:
res = json.loads(line)
print(res)


# pickle 用法特征:
import pickle
"""
pickle 可以连续dump,也可以连续load
"""
dic1 = {'a':1,"b":2}
dic2 = {"c":3,"d":4}

with open("ceshi05.pkl",mode="wb") as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp)

with open("ceshi05.pkl",mode="rb") as fp:
try:
while True:
dic = pickle.load(fp)
print(dic)
except:
pass
print(333)

# 文件对象是迭代器么? 是的!
from collections import Iterator
print(isinstance(fp,Iterator))

"""
try ... except ...
把有问题的代码直接卸载try这个代码块当中,
如果出现异常,直接走except这个代码块,防止报错终止程序.
try:
print(wangwendashuaiguo)
except:
pass
"""


# 总结:
"""

# json 和 pickle 两个模块的区别:
(1)json序列化之后的数据类型是str,所有编程语言都识别,
但是仅限于(int float bool)(str list tuple dict None)
json不能连续load,只能一次性拿出所有数据
(2)pickle序列化之后的数据类型是bytes,
所有数据类型都可转化,但仅限于python之间的存储传输.
pickle可以连续load,多套数据放到同一个文件中

"""

1.3 random模块

# ### random 随机模块
import random#random() 获取随机0-1之间的小数(左闭右开) 0<= x < 1
res = random.random()
print(res)

#randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值)

# 0 1 2 不包含3
res = random.randrange(3)
print(res)

# 1 ~ 4
res = random.randrange(1,5)
print(res)

# 1 4 7
res = random.randrange(1,10,3)
print(res)

#randint() 随机产生指定范围内的随机整数 (必须两个参数) (了解)
# 1 2 3 4
res = random.randint(1,4)
print(res)
# randint是给1个还是给3个都是错误的,只能给2个参数
# res = random.randint(1,10,3)


#uniform() 获取指定范围内的随机小数(左闭右开) 1 <= x < 3
res = random.uniform(1,3) # 推荐写法
print(res)
res = random.uniform(2,-1) # 不推荐
print(res)

# a = 2 b =-1
# return a + (b-a) * self.random() (0<= x < 1)
# self.random() # -1 < x <= 2
# 2 + (-1-2) * 0 = 2
# 2+ (-1-2) * 1 = 2 - 3 = -1
# 2


#choice() 随机获取序列中的值(多选一)
lst = ["舒则会","郭一萌","银燕","廖萍萍"]
res = random.choice(lst)
print(res)

# 自定义choice
def mychoice():
length = len(lst)
res = random.randrange(0,length)
return lst[res]
print(mychoice())

#sample() 随机获取序列中的值(多选多) [返回列表]
lst = ["舒则会","郭一萌","银燕","银燕2","廖萍萍","刘璐"]
lst = random.sample(lst,3)
print(lst)

#shuffle() 随机打乱序列中的值(直接打乱原序列)
lst = [1,2,3,4,5]
random.shuffle(lst)
print(lst)

# 随机验证码
def yanzhengma():
strvar = ""
for i in range(4):
# a~z 97 ~ 122 获取小写字母
res1 = chr(random.randrange(97,123))
# A~Z 65 ~ 90 获取大写字母
res2 = chr(random.randrange(65,91))
# 0~9 获取0~9 十个数字
res3 = random.randrange(0,10)
# 把可能的字符放到列表当中
lst = [res1,res2,res3]
# 拼接字符串
strvar += str(random.choice(lst))
# 返回字符串
return strvar

res= yanzhengma()
print(res)

1.4 os模块

# ### os 模块 对系统进行操作
import os

#system() 在python中执行系统命令
# os.system("mspaint")
# os.system("ipconfig")

#popen() 执行系统命令返回对象,通过read方法读出字符串,不会乱码
obj = os.popen("ipconfig")
print(obj.read())

#listdir() 获取指定文件夹中所有内容的名称列表
"""
. 代表的是当前路径
.. 代表的是上一级路径
"""
res = os.listdir(".")
print(res) # ['1.py', '2.py', '20190728_1.json_pickle.mp4', '3.py', '4.py', 'ceshi.txt', 'ceshi02.txt', 'ceshi03.json', 'ceshi04.json', 'ceshi05.pkl', 'ceshi_shengyin.mp4', 'part10.md', 'part11.md']

#getcwd() 获取当前文件所在的默认路径
res = os.getcwd()
print(res) # D:\周末四期\L006
print(__file__) # 完整路径(外加文件名)




#os.mkdir 创建目录(文件夹)
# os.mkdir("ceshi100")
# os.rmdir 删除目录(文件夹)
# os.rmdir("ceshi100")
#os.rename 对文件,目录重命名
# os.rename("ceshi100","ceshi200")

#copy(src,dst) #复制文件权限和内容
# import shutil
# shutil.copy("ceshi02.txt","ceshi333.py")


#chdir() 修改当前文件工作的默认路径
# os.chdir(r"D:\周末四期\L005")
# os.mkdir("ceshi200")

#environ 获取或修改环境变量
# print(os.environ)
# os.system("QQScLauncher")

# environ 返回的是字典,通过path环境变量,追加路径,在执行命令的时候,一个一个路径取找,如果找到了直接执行,反之报错
'''
print(os.environ["PATH"])
os.environ["PATH"] += r""";C:\Program Files (x86)\Tencent\QQ\Bin"""
os.system("QQScLauncher.exe")
'''

#--os 模块属性
#name 获取系统标识 linux,mac ->posix windows -> nt
print(os.name)
#sep 获取路径分割符号 linux,mac -> / window-> \
print(os.sep)
#linesep 获取系统的换行符号 linux,mac -> \n window->\r\n 或 \n
print(repr(os.linesep))

猜你喜欢

转载自www.cnblogs.com/NGU-PX/p/11294439.html