文章出處

Python第十四天 序列化  pickle模塊  cPickle模塊  JSON模塊  API的兩種格式

 

目錄

Pycharm使用技巧(轉載)

Python第一天 安裝 shell 文件

Python第二天 變量 運算符與表達式 input()與raw_input()區別 字符編碼

Python第三天 序列 數據類型 數值 字符串 列表 元組 字典

Python第四天 流程控制 ifelse條件判斷 forwhile循環

Python第五天 文件訪問 for循環訪問文件 while循環訪問文件 字符串的startswith函數和split函數

Python第六天 類型轉換

Python第七天 函數 函數參數 函數變量 函數返回值 多類型傳值 冗余參數 函數遞歸調用 匿名函數 內置函數 列表表達式/列表重寫

Python第八天 模塊 包 全局變量和內置變量__name__ Python path

Python第九天 面向對象 類定義 類的屬性 類的方法 內部類 垃圾回收機制 類的繼承

Python第十天 print >> f,和fd.write()的區別 stdout的buffer 標準輸入 標準輸出 標準錯誤 重定向

Python第十一天 異常處理 glob模塊和shlex模塊 打開外部程序和subprocess模塊 subprocess類 Pipe管道 operator模塊 sorted函數 生成器 walk模塊 hashlib模塊

Python第十二天   收集主機信息   正則表達式   正則表達式  無名分組   有名分組

Python第十三天   django 1.6   導入模板   定義數據模型   訪問數據庫   GET和POST方法    SimpleCMDB項目   urllib模塊   urllib2模塊  httplib模塊  django和web服務器整合  wsgi模塊   gunicorn模塊

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
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()