包与模块的使用

包:

包就是一个包含有_ _ init _ _.py文件的文件夹,所以我们创建包的目的就是为了用文件夹将文件/模块组织起来

需要强调的是:
  1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

  2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块

为何要使用包

包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来
随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性

模块的使用

序列化:

我们把内存中的某一类的数据,转换成一种可以被其它语言共享的格式存到硬盘中称之为序列化.

反序列化:

把硬盘中某一类格式转换成可以使用的数据称之为反序列化

为什么要序列化:

1.存档:把内存中的数据持久化的到硬盘

2.跨平台交换数据

​ 在python中:

​ 存档推荐使用=>pickle格式

​ 跨平台交互=>推荐使用json格式

3.如何序列化:

普通的序列化方式:

1.序列化
items=["圣剑","蝴蝶","BKB"]


dic_str=str(items)

with open('db.txt',mode='wt',encoding="utf-8") as f:
    f.write(dic_str)

2.反序列化
with open('db.txt',mode='rt',encoding='utf-8') as f:
    data=f.read()  # "['圣剑', '蝴蝶', 'BKB']"

    items=eval(data)
    print(items[0])
json模块
import json
    
序列化方式一:
t={"a":1,"b":2}  # 字典=======》json格式的字符串:"[1,2,3]"

res=json.dumps(t)
print(res,type(res))

with open("a.json",mode='wt',encoding='utf-8') as f:
    f.write(res)

json反序列化方式一:
with open("a.json",mode='rt',encoding='utf-8') as f:
    data=f.read()
    dic=json.loads(data)
    print(dic,type(dic))

res=json.loads('{"k1":111}')
print(res['k1'])

json序列化方式二:
t={"a":1,"b":2}  # 字典=======》json格式的字符串:"[1,2,3]"


with open("b.json",mode='wt',encoding='utf-8') as f:
    json.dump(t,f)

json反序列化方式二:
with open("b.json",mode='rt',encoding='utf-8') as f:
    dic=json.load(f)
    print(dic,type(dic))
pickle模块

优点:可以识别所有python类型

缺点:只能用于python中,无法跨平台交互

import pickle

# s = {1,2,3,4,5}

#

# res=pickle.dumps(s)

# # print(res,type(res))

# with open('a.pkl',mode='wb') as f:

#     f.write(res)

with open('a.pkl',mode='rb') as f:
    data=f.read()
    s=pickle.loads(data)
    print(type(s))
hashlib模块

hashlib:hash是一种算法(md5\sha256\sha512等),我们为该算法传入内容,该算法会计算得到一串hash值

hash值具备以下三个特点:

​ 1.如果传入的内容一样,并采用hash算法也一样,那么得到这个hash值一定是一样的

​ 2,hash值的长度取决于采用的算法,与传入的文本内容的大小无关

​ 3,hash值不可逆

import hashlib

m=hashlib.md5()# m=hashlib.sha256()

m.update('hello'.encode('utf8'))
print(m.hexdigest())  #5d41402abc4b2a76b9719d911017c592

m.update('alvin'.encode('utf8'))

print(m.hexdigest())  #92a7e713c30abbb0319fa07da2a5c4af

m2=hashlib.md5()
m2.update('helloalvin'.encode('utf8'))
print(m2.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af

'''
注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样
但是update多次为校验大文件提供了可能。
'''

猜你喜欢

转载自www.cnblogs.com/lgh8023/p/13400099.html
今日推荐