缅甸新锦江赌场-官方网站

English 浙江双荣电子
0577-62816098

产品分类

/PRODUCTS

  联系我们

双荣在线
双荣在线
CONTACT US

电话:0577-62816098

传真:0577-62816098

E-mail:1620486953@qq.com

新闻分类

/NEWS

新闻中心

当前位置:首页 >> 新闻中心 >> 详解二次接线端子铜质螺丝材质之普通黄铜

数据类型体系化,Python第玖五天

来源:缅甸新锦江 2019-08-02 06:14

Pythoy 数据类型类别化——json&pickle 模块

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192607210600a668b5112e4a979dd20e4661cc9c97000

Python第7五日 类别化  pickle模块  cPickle模块  JSON模块  API的二种格式

 

目录

Pycharm使用技艺(转发)

Python第一天  安装  shell  文件

Python第壹天  变量  运算符与表明式  input()与raw_input()分化  字符编码  python转义符  字符串格式化

Python第壹日 种类  四种数据类型  数值  字符串  列表  元组  字典

Python第五日   流程序调控制   if else条件剖断   for循环 while循环

Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数

Python第四天   类型转变

Python第叁周   函数  函数参数   函数变量   函数再次来到值  多花色传值    冗余参数   函数递归调用   无名函数   内置函数   列表表明式/列表重写

Python第十八日  模块   包   全局变量和松手变量__name__    Python path

Python第10天  面向对象  类定义   类的天性    类的法子    内部类   垃圾回收机制   类的承继装饰器

Python第7天   print >> f,和fd.write()的分别    stdout的buffer  规范输入 标准输出  标准错误   重定向 输出流和输入流

Python第8一天    十分管理  glob模块和shlex模块    张开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函数   生成器  walk模块   hashlib模块

Python第7二天     收罗主机音信     正则表明式  无名分组   著名分组

Python第九四日   django 壹.陆   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib二模块  httplib模块  django和web服务器整合  wsgi模块   gunicorn模块

Python第7八天 连串化  pickle模块  cPickle模块  JSON模块  API的三种格式

Python第玖三日  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fabric模块  

 

 

 

python中的任何数据类型都可以dump成json格式

 

简短连串化
序列化
将目的的气象新闻调换为能够积累或传输的款型的长河
内部存款和储蓄器里面有二个数据结构,你期望把它保存下去重用,也许发送给别的人。
重重戏耍允许你在退出的时候保存进程,然后你重新启航的时候回来上次淡出的地点

 

常用的某个系列化
pickle、cPickle 这七个模块用法大致
JSON
Shelve
缅甸新锦江赌场网址,YAML

 


pickle模块
具有python协助的品种都能够用pickle做种类化

终端一:
>>> entry = {'a':11, 'b':22}
>>> import pickle
>>> with open('entry.pickle', 'wb') as f: 以二进制方式展开,文件名是entry.pickle
... pickle.dump(entry, f)

pickle的方法
dump保存到磁盘
dumps保存到内存
load 读出到磁盘
loads 读出到内部存款和储蓄器

从磁盘反体系化对象
终端二
>>> import pickle
>>> with open('entry.pickle', 'rb') as f: 文件名是entry.pickle
... entry = pickle.load(f)
>>> entry
{'a': 11, 'b': 22}

 

系列化到内部存款和储蓄器
>>> b = pickle.dumps(entry)
>>> entry3 = pickle.loads(b)

 


json模块

类别化对象供其余语言读写
JavaScript Object Notation
Json是被规划为跨语言使用的
Json是文本格式
Json必须使用unicode编码,暗中同意utf-八格局存款和储蓄

 

 

数码保存至JSON文件

import json
序列化
d = {}
d['a'] = 'a'
d['b'] = 235
d['c'] = ('c1','c2')
d['d'] = True
d['e'] = None
with open('/tmp/d.json', mode='w') as fd:
json.dump(d, fd)
缅甸新锦江赌场,cat /tmp/d.json

反系列化
with open('/tmp/d.json') as fd:
d1 = json.load(fd)

json序列化
json.dump()
json.load()
json.dumps()
json.loads()

 

传送json格式的数额
定义url和方法
def collectjson(req):
if req.POST:
数据类型体系化,Python第玖五天。jsonobj = json.loads(req.body)
host = Host()
host.hostname = jsonobj['hostname']
host.vendor = jsonobj['vendor']
host.product = jsonobj['product']
……
host.save()

 

命令行访问数据库
python manager.py shell
from hostinfo.models import *
hg = HostGroup.objects.all()[0]
hg.groupname
hg.members.all()
h = hg.members.all()[0]
ip = h.ip
host = Host.object.get(hostname='agent03')
host.ip = '1九二.168.一.1壹三' //修改记录
host.save()

 

 


API的三种格式

----json 格式
{groupname: "web",members:[]}

[
{ groupanme: ‘web’,
members: [
{ hostname: ‘agent01’,
ip: ‘192.168.1.1’ },
]
},
]

----shell 格式
组名 主机名 ip地址
web agent02 192.168.3.163
web agent01 192.168.3.164

vim views.py
from django.shortcuts import render
from django.http import HttpResponse
from hostinfo.models import Host,HostGroup
import pickle
import json

# Create your views here.

def collect(req):
if req.POST:
#obj = pickle.loads(req.body)
obj = json.loads(req.body)
hostname = obj['hostname']
ip = obj['ip']
osver = obj['osver']
vendor = obj['vendor']
product = obj['product']
cpu_model = obj['cpu_model']
cpu_num = obj['cpu_num']
memory = obj['memory']
sn = obj['sn']
try:
host = Host.objects.get(sn=sn)
except:
host = Host()
host.hostname = hostname
host.ip = ip
host.osver = osver
host.vendor = vendor
host.product = product
host.cpu_model = cpu_model
host.cpu_num = cpu_num
host.memory = memory
host.sn = sn
host.save()
return HttpResponse('OK')
else:
return HttpResponse('not data')

def getjson(req):
ret_list = []
hg = HostGroup.objects.all()
for g in hg:
ret = {'groupname':g.groupname,'members':[]}
for h in g.members.all():
ret_h = {'hostname':h.hostname,'ip':h.ip}
ret['members'].append(ret_h)
ret_list.append(ret)
return HttpResponse(json.dumps(ret_list))

def gettxt(req):
res = ''
hg = HostGroup.objects.all()
for g in hg:
groupname = g.groupname
for h in g.members.all():
hostname = h.hostname
ip = h.ip
res += groupname+' '+hostname+' '+ip+'\n'
return HttpResponse(res)

json.dumps(ret_list)再次来到的是值是字符串类型
d1 = json.load(fd)
type(d1)

 

TOC

  • 哪些是类别化/反系列化
  • pickle 模块
  • json 模块
  • 对比json和pickle
  • json.tool 命令行接口

解释lambda:

如何是体系化/反种类化?

就算将内部存款和储蓄器中的数据类型产生可存储或传输的东西,这1历程叫做体系化,在python中叫pickling,在其余语言叫 serialization,marshalling,flattening等,其实base6四转码也可称之为类别化,因为大多文件协议如http,smtp都以只援救ascii编码传输。
体系化之后可以将内容写入磁盘,或透过互连网传输到任何机器。
反体系化正是类别化的逆进程,unpickling

__Python__提供了八个模块来张开体系化操作,分别是pickle和json

lambda 参数:参数运算规则

pickle模块

pickle是python语言专门项指标连串化方式。
pickle模块能够将python中的任何数据类型实行类别化,并连串化为bytes类型。
pickle模块提供的措施

  • dump(obj, fp) 将obj连串化后一直写入fp对象中
  • dumps(obj) 将obj种类化为bytes,方法return该bytes对象
  • load(fp) 从fp中读取种类化bytes对象并反连串化
  • loads(bytes) 将bytes反种类化
    实践:
import pickle
with open('test.pkl', 'wb') as fp:  # 注意因为pickle序列化后是bytes所以file-object 能够写入二进制,那么open的打开方式就必须是二进制方式'wb'。
    pickle.dump({'a': 1, 'b': 2}, fp)

with open('test.txt', 'rb') as fp: # 同样读取也是要是一个binary file-object
    print(pickle.load(fp))
  • 助记:dumps带s正是系列化为string,dump不带s便是连串化为string后一向写入fp。load和loads也如出1辙那样记。
  • 设若pickle连串化写入文件,那么这一个文件后缀最棒用.pkl或.pk,辨识度高

f = lambda x,y,z:xyz
f(1,2,3)

json模块

json不多说,是数据沟通的一种格式。叫 json document
json模块方法和pickle类似:

  • dump(obj, fp) 将obj连串化后一贯写入fp对象中,由于体系化后的json是字符串,所fp必须是text Stream类型
  • dumps(obj) 将obj体系化为json字符串,方法return该json字符串
  • load(fp) 从fp中读取json并反系列化 ,那一个就不须要fp是text Stream类型,也正是从文件中既能够读取bytes,也足以string。
  • loads(obj) 将json反连串化,能够是json的字符串或bytes 或bytearray
  • 瞩目,tuple元组的体系化会会编制程序json的array数组,假若再打开deserialize就编制程序了列表而不是元组。
    实验:
import json

i = 10
s = 'hello world!'
t = (1,)
l = [10, 'hello world!', ['a', 'b'], {'a': 1, 'b': 2}]
d = {'a': 1, 'b': 2, 'c': l}

print(json.dumps(i))
print(json.dumps(s))
print(json.dumps(t))
print(json.dumps(l))
print(json.dumps(d))

with open('test.json', 'w') as fp:
    json.dump(l, fp)

with open('test.json', 'rb') as fp:
    print(json.load(fp))

print(json.loads(b'[10, "hello world!", ["a", "b"], {"a": 1, "b": 2}]'))

结果:

10
"hello world!"
[1]
[10, "hello world!", ["a", "b"], {"a": 1, "b": 2}]
{"a": 1, "b": 2, "c": [10, "hello world!", ["a", "b"], {"a": 1, "b": 2}]}
[10, 'hello world!', ['a', 'b'], {'a': 1, 'b': 2}]
[10, 'hello world!', ['a', 'b'], {'a': 1, 'b': 2}]

结果:
6

对比json和pickle

json

  • 在python中一般只可以连串化int/str/list/dict
  • 跨语言

pickle

  • 能连串化python任何对象
  • 只能在python中使用

json.tool 命令行接口

json.tool提供在命令行对json字符串进行json格式校验和杰出打字与印刷pretty-print

用法:
:> echo '{"josn": "obj"}' | python -m json.tool
{
"json":"obj"
}
:> python -m json.tool mp_films.json # 后面跟json文件

在程序运营的经过中,全体的变量都以在内存中,比方,定义一个dict:

d = dict(name='Bob', age=20, score=88)

能够随时修改造量,比方把name改成'Bill',然则只要程序停止,变量所占有的内部存款和储蓄器就被操作系统全体回收。如若未有把修改后的'Bill'存款和储蓄到磁盘上,下一次再也运转程序,变量又被伊始化为'鲍勃'。

大家把变量从内部存款和储蓄器中成为可存款和储蓄或传输的经过称之为种类化,在Python中叫pickling,在其它语言中也被称之为serialization,marshalling,flattening等等,都以3个意思。

种类化之后,就足以把连串化后的内容写入磁盘,可能通过互联网传输到别的机器上。

扭动,把变量内容从系列化的指标重新读到内部存款和储蓄器里称之为反系列化,即unpickling。

Python提供了pickle模块来兑现类别化。

率先,我们尝试把3个目的连串化并写入文件:

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'

pickle.dumps()方法把自由对象体系化成1个bytes,然后,就能够把这一个bytes写入文件。恐怕用另2个办法pickle.dump()直接把对象体系化后写入二个file-like Object:

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()

看看写入的dump.txt文件,一批乱7八糟的内容,那么些都是Python保存的对象内部音讯。

当大家要把对象从磁盘读到内部存款和储蓄器时,能够先把内容读到3个bytes,然后用pickle.loads()方法反系列化出目的,也足以直接用pickle.load()方法从贰个file-like Object中一直反连串化出指标。大家开发另3个Python命令行来反类别化刚才保存的指标:

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

首页 | 关于我们 | 产品中心  | 新闻中心 | 资质认证  | 下载中心 | 在线留言  | 联系我们
Copyright © 2014 缅甸新锦江赌场-官方网站缅甸新锦江 Rights Reserved.  技术支持:温州中网   备案号:浙ICP备14009337号-1  

Baidu
sogou