一 序列化

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

字典示例
import json
d={'a':1,'b':2}
ret = json.dumps(d)#序列化
print(ret,type(ret))
dic=json.loads(ret)#反序列化
print(dic,type(dic))

列表示例
import json
d=['a',1,'b','2']
ret = json.dumps(d)#序列化
print(ret,type(ret))
dic=json.loads(ret)#反序列化
print(dic,type(dic))

json dump load 文件句柄的事例
import json
data = {'a':['1','2'],'s':'3','age':16}
with open('json_sample','w',encoding='utf-8') as f:json.dump(data,f)#句柄序列化
with open('json_sample','r',encoding='utf-8') as f:print(json.load(f))#句柄反序列化

json & pickle 模块

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的

dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]

loads和dumps

loads和dumps

import json
f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()f = open('json_file')
dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(dic2),dic2)load和dump

load和dump

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

json的格式化输出


pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典import time
struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)

pickle

这时候机智的你又要说了,既然pickle如此强大,为什么还要学json呢?
这里我们要说明一下,json是一种所有的语言都可以识别的数据结构。
如果我们将一个字典或者序列化成了一个json存在文件里,那么java代码或者js代码也可以拿来用。
但是如果我们用pickle进行序列化,其他语言就不能读懂这是什么了~
所以,如果你序列化的内容是列表或者字典,我们非常推荐你使用json模块
但如果出于某种原因你不得不序列化其他的数据类型,而未来你还会用python对这个数据进行反序列化的话,那么就可以使用pickle


二 模块

1 什么是模块?

常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

但其实import加载的模块分为四个通用类别: 

  1 使用python编写的代码(.py文件)

  2 已被编译为共享库或DLL的C或C++扩展

  3 包好一组模块的包

  4 使用C编写并链接到python解释器的内置模块

2 为何要使用模块?

如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

3.如何使用模块?

3.1    import

示例文件:自定义模块my_module.py,文件名my_module.py,模块名my_module

在一行导入多个模块  import sys,os,re

3.2   from ... import...

对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式

而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了、

from my_module import read1,read2

rom ... import...也支持as

from my_module import read1 as read

 

也支持导入多行

from my_module import (read1, read2,money)

转载于:https://www.cnblogs.com/chongdongxiaoyu/p/8494789.html

序列化、模块 day21相关推荐

  1. 4-20模块 序列化模块 hashlib模块

    1,模块,py文件就是模块,py之所以好用就是模块多. 2,模块的分类: 1,内置模块,python 安装时自带的模块 2,扩展模块,别人写好的,需要安装之后,可以直接使用.itchat微信模块, b ...

  2. python中常用的序列化模块_第六章 常用模块(5):python常用模块(序列化模块:pickle,json,shelve,xml)...

    6.3.7 序列化模块 (pickle,json,shelve,xml) 文件写入,数据传输时,我们都是以字符串形式写入的(因为字符串可以encode成bytes). 那其他类型(比如字典,列表等)想 ...

  3. python sys模块讲解_python模块之sys模块和序列化模块(实例讲解)

    sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...

  4. time、random以及序列化模块

    一. time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行" ...

  5. 模块(sys/os/序列化模块)

    sys 模块: sys.path  返回模块的搜索路径,初始化时使用pythonpath环境变量的值 sys.modules   返回所有在当前这个python程序中导入的模块的 sys.exit   ...

  6. 序列化模块和hashlib模块

    一:序列化模块 1,什么叫序列化? 序列化就是将原本的字典.列表等内容转换成一个字符串.python中的序列化模块有 json,pickle,shelve. ps:能存储在文件中的一定是字符串或者是字 ...

  7. python序列化模块struct_Python-序列化模块-json-62

    序列化模块 什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存 ...

  8. python内置json模块_python的常用内置模块之序列化模块json

    #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. '''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文 ...

  9. os模块,序列化模块,json模块,pickle模块

    OS模块 把路径中不符合规范的/改成操作系统默认的格式 1 path = os.path.abspath("D:\dayday\day 19\3.py") 2 print(path ...

  10. python 序列化模块_Python进阶-XII serialize(序列化)、序列化模块

    一.serialize 序列化 1.什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现 ...

最新文章

  1. Linux服务器上线时间,查看linux服务器时间
  2. Modelsim仿真流程
  3. Qt::WindowModal和Qt::ApplicationModal的区别
  4. 潘多拉设置有线中继_避坑指南:购买无线中继器必看
  5. laravel常用响应操作
  6. centos ping不通内网 网关 外网 域名等以解决 通过设置为动态IP(启用dhcp协议)
  7. asp.net get set用法
  8. 高性能mysql之慎用BLOB与TEXT
  9. 网管员应该掌握好的学习方法
  10. 论文阅读笔记(audio-visual相关)—Co-Separating Sounds of Visual Objects
  11. .netcore的mysql链接字符串ConnectionString到底应该怎么设置
  12. 解决联想拯救者打开AMD Radeon Software弹出“The version of AMD Radeon Software ......”框问题
  13. 【Python】伪距单点定位
  14. 超详细Tarjan算法总结,求强连通分量,割点,割边,有重边的割边
  15. echarts 堆叠柱状图label显示总和
  16. p2p终结者破解版下载 4.15 2011最新版
  17. 张一鸣:我这7年来的人生感悟
  18. word不能读出html表格,Word表格不能输入文字的几种情况
  19. 什么是CDN?CDN的原理和作用是什么?
  20. 序贯概率比检验法matlab编程,序贯概率比检验

热门文章

  1. Nginx中间件web服务安装
  2. IOS --xcode删除Provisioning Profiles文件
  3. php imagick
  4. 《Effective Java读书笔记》--通用程序设计
  5. ZOJ-2575 Full of Painting 动态规划
  6. EIGRP路由汇总与安全性配置
  7. 淘宝双12惊喜——“寻”千兆,万兆光模块等你来
  8. ubuntu安装ssh无法连接解决日志(已解决,可连接)-转
  9. [Java] 1015. Reversible Primes (20)-PAT甲级
  10. PAT 1066. 图像过滤(15)-乙级