常用模块

Posted eaoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用模块相关的知识,希望对你有一定的参考价值。

一、模块

什么是模块?模块是别人写好的功能放在一个文件里面,分为三种模块:

1.内置模块:安装python解释器的时候一起装上的

2.第三方模块、扩展模块:需要自己安装

3.自定义模块:你写的py文件

 

二、序列化模块

序列:列表,元组,字符串,bytes

什么叫序列化:把一个数据类型转换成字符串、bytes类型的过程就是序列化

为什么要把一个数据类型序列化?

{‘name‘:‘路飞‘, ‘sex‘:‘male‘}

当你需要把一个数据类型储存在文件中

当你需要把也给数据类型通过网络传输的时候及不安全的

 

1.json模块

import json
stu = {‘name‘:‘路飞‘, ‘gender‘:‘male‘}
ret = json.dumps(stu)  # 序列化过程
print(stu, type(stu))
print(ret, type(ret))

# d = json.loads(ret)    # 反序列化的过程
# print(‘d-->‘,d,type(d))

# lst = [1,2,3,4,‘aaa‘,‘bbb‘]
# ret = json.dumps(lst)  # 序列化的过程
# print(lst,type(lst))
# print(ret,type(ret))
#
# d = json.loads(ret)    # 反序列化的过程
# print(‘d-->‘,d,type(d))

json的优点:

  所有的语言都通用

缺点:

  只支持非常少的数据类型

    在网络操作中,以及多语言环境中,要传递字典、数字、字符串、列表等简单的数据类型的时候使用。

  对数据类型的约束很苛刻:

    字典的key必须是字符串

    只支持:数字,字符串,列表,字典

    且所有的字符串都必须是用“”表示

    dumps(dic/list)   dic/list --> str  序列化方法
    loads(str)        str --> dic/list  反序列化方法
    dump(dic/lst,f)   dic/list --> 文件 序列化方法
    load(f)           文件 --> dic/list 反序列化方法 多次dump进入文件中的数据load会报错
    参数:ensure_ascii=False 希望序列化的中文能以中文的形式被现实并且写到文件中

 (1)方法dump load这两个方法,是完全和文件打交道。

# dic = {‘name‘:‘路飞‘,‘sex‘:‘male‘}
# with open(‘json_file‘,‘w‘,encoding=‘utf-8‘) as f:
#     json.dump(dic,f,ensure_ascii=False)

# with open(‘json_file‘,‘r‘,encoding=‘utf-8‘) as f:
#     dic = json.load(f)
# print(dic,dic[‘name‘])

 (2)能不能多次向同一个文件中dump?可以,但是不能多次load

# dic = {‘name‘:‘路飞‘,‘sex‘:‘male‘}
# with open(‘json_file‘,‘w‘,encoding=‘utf-8‘) as f:
#     json.dump(dic,f,ensure_ascii=False)
#     json.dump(dic,f,ensure_ascii=False)
#     json.dump(dic,f,ensure_ascii=False)
#     json.dump(dic,f,ensure_ascii=False)
#     json.dump(dic,f,ensure_ascii=False)

# with open(‘json_file‘,‘r‘,encoding=‘utf-8‘) as f:
#     dic = json.load(f)

 (3)有需求要向文件中写入多个字典

# def my_dumps(dic):
#     with open(‘json_file‘, ‘a‘, encoding=‘utf-8‘) as f:
#         dic_str = json.dumps(dic)
#         f.write(dic_str + ‘
‘)
# dic1 = {‘name‘:‘路飞‘,‘sex‘:‘male‘}
# dic2 = {‘name‘:‘索隆‘,‘sex‘:‘male‘}
# dic3 = {‘name‘:‘山治‘,‘sex‘:‘male‘}
# my_dumps(dic1)
# my_dumps(dic2)
# my_dumps(dic3)
#
# with open(‘json_file‘,‘r‘,encoding=‘utf-8‘) as f:
#     for line in f:
#         dic = json.loads(line.strip())
#         print(dic[‘name‘])

 (4)json格式化

# import json
# data = {‘username‘:[‘李华‘,‘二愣子‘],‘sex‘:‘male‘,‘age‘:16}
# json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(‘,‘,‘:‘),ensure_ascii=False)
# print(json_dic2)

  

2.pickle

import pickle
# class Course():
#     def __init__(self,name,price):
#         self.name = name
#         self.price = price

# python = Course(‘python‘,29800)
# linux = Course(‘linux‘,25800)
# mysql = Course(‘mysql‘,18000)
# ret = pickle.dumps(python)
# print(ret)

# p = pickle.loads(ret)
# print(p.name,p.price)

# with open(‘pickle_file‘,‘wb‘) as f:
#     pickle.dump(python,f)

# with open(‘pickle_file‘,‘rb‘) as f:
#     course = pickle.load(f)
# print(course.name)

  

pickle的dump,load 操作文件必须以+b模式打开。

在load的时候,如果这个要被load的内容所在的类不在内存中,会报错。

pickle支持多次dump和多次load(需要异常处理)

 

pickle的多次dump

# def my_dump(course):
#     with open(‘pickle‘,‘ab‘) as f:
#         pickle.dump(course,f)
# my_dump(python)
# my_dump(linux)
# my_dump(mysql)

# with open(‘pickle‘,‘rb‘) as f:
#     while True:
#         try:
#             content = pickle.load(f)
#             print(content.name)
#         except EOFError:
#             break

  

以上是关于常用模块的主要内容,如果未能解决你的问题,请参考以下文章

Python 常用模块学习

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

C#常用代码片段备忘

swift常用代码片段

# Java 常用代码片段

# Java 常用代码片段