Python第十四天 序列化 pickle模塊 cPickle模塊 JSON模塊 API的兩種格式
目錄
Python第二天 變量 運算符與表達式 input()與raw_input()區別 字符編碼
Python第三天 序列 數據類型 數值 字符串 列表 元組 字典
Python第四天 流程控制 ifelse條件判斷 forwhile循環
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中的任何數據類型都可以dump成json格式
簡單序列化
序列化
將對象的狀態信息轉換為可以存儲或傳輸的形式的過程
內存里面有一個數據結構,你希望把它保存下來重用,或者發送給其他人。
很多游戲允許你在退出的時候保存進度,然后你再次啟動的時候回到上次退出的地方
常用的一些序列化
pickle、cPickle
JSON
Shelve
YAML
-----------------------------------------------------------------------------------------
pickle模塊
所有python支持的類型都可以用pickle做序列化
終端一:
>>> entry = {'a':11, 'b':22}
>>> import pickle
>>> with open('entry.pickle', 'wb') as f:
... pickle.dump(entry, f)
從磁盤反序列化對象
終端二
>>> import pickle
>>> with open('entry.pickle', 'rb') as f:
... 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)
文章列表
![]() |
不含病毒。www.avast.com |