文章出處

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

 

目錄

Pycharm使用技巧(轉載)

Python第一天  安裝  shell  文件

Python第二天  變量  運算符與表達式  input()與raw_input()區別  字符編碼  python轉義符  字符串格式化

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

Python第四天   流程控制   if else條件判斷   for循環 while循環

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第十五天  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)

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()