Python第十四天 序列化 pickle模塊 cPickle模塊 JSON模塊 API的兩種格式
目錄
Python第二天 變量 運算符與表達式 input()與raw_input()區別 字符編碼 python轉義符 字符串格式化
Python第三天 序列 5種數據類型 數值 字符串 列表 元組 字典
Python第四天 流程控制 if else條件判斷 for循環 while循環
Python第五天 文件訪問 for循環訪問文件 while循環訪問文件 字符串的startswith函數和split函數
Python第七天 函數 函數參數 函數變量 函數返回值 多類型傳值 冗余參數 函數遞歸調用 匿名函數 內置函數 列表表達式/列表重寫
Python第八天 模塊 包 全局變量和內置變量__name__ Python path
Python第九天 面向對象 類定義 類的屬性 類的方法 內部類 垃圾回收機制 類的繼承 裝飾器
Python第十天 print >> f,和fd.write()的區別 stdout的buffer 標準輸入 標準輸出 標準錯誤 重定向 輸出流和輸入流
Python第十二天 收集主機信息 正則表達式 無名分組 有名分組
Python第十四天 序列化 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-8方式存儲
數據保存至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:
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 = '192.168.1.113' //修改記錄
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)
文章列表
留言列表