利用python的pickle模組儲存和讀寫任意的python資料結構
上文中提到PyQt的QDataStream類對Python型別和PyQt型別的資料進行讀寫操作,同樣python自身提供了標準pickle模組可對任意的python資料結構進行儲存和讀寫,當然pickle模組可以對Qt的資料型別進行儲存和讀寫。其實QDataStream類和pickle模組大同小異的,但是在實踐建議,當利用PyQt寫Gui程式時,最好還是利用QDataStream類,因為它針對Qt型別更有效果。寫標準的python程式,則利用pickle模組。
以下例子為建立一個型別結構Movie,包含的資料型別都是標準的python型別,然後將此型別通過pickle模組儲存到二進位制檔案,然後從二進位制檔案將儲存的內容讀出。與上文提到的QDataStream類非常類似。
import pickle
import gzip
import os
import datetime
class Movie(object):
UNKNOWNYEAR = 1890
UNKNOWNMINUTES = 0
def __init__(self, title=None, year=UNKNOWNYEAR,
minutes=UNKNOWNMINUTES, acquired=None, notes=None):
self.title = title
self.year = year
self.minutes = minutes
self.acquired = (acquired if acquired is not None
else datetime.date.today())
self.notes = notes
class MovieContainer(object):
def __init__(self,fname,movies):
self.__fname = fname
self.__movies = movies
def savePickle(self):
error = None
fh = None
try:
fh = gzip.open(str(self.__fname), "wb")
pickle.dump(self.__movies, fh, 2)
except EnvironmentError as e:
error = "Failed to save: {0}".format(e)
finally:
if fh is not None:
fh.close()
if error is not None:
print(error)
print("Saved 1 movie records to {0}".format(
os.path.basename(self.__fname)))
def loadPickle(self):
error = None
fh = None
try:
fh = gzip.open(str(self.__fname), "rb")
self.__movies = pickle.load(fh)
except EnvironmentError as e:
error = "Failed to load: {0}".format(e)
finally:
if fh is not None:
fh.close()
if error is not None:
print(error)
print("Loaded 1 movie records from {0}".format(
os.path.basename(self.__fname)) )
print(self.__movies.title,self.__movies.year,self.__movies.minutes,self.__movies.acquired,self.__movies.notes)
if __name__ == "__main__":
#textdata=[["god save",1989,45,None,"test data god save"],
#["queen save",1960,56,None,"test data queen save"],
#["HK save",1990,66,None,"test data HK save"],
#["US save",2010,99,None,"test data US save"]]
textdata=[["God save world",1989,45,None,"HELLO WORLD"]]
fname="/home/yrd/work/movie.pickle"
for data in textdata:
movie=Movie(data[0],data[1],data[2],data[3],data[4])
moviecontainer=MovieContainer(fname, movie)
moviecontainer.savePickle()
moviecontainer.loadPickle()
執行結果:
Saved 1 movie records to movie.pickle
Loaded 1 movie records from movie.pickle
God save world 1989 45 2017-01-14 HELLO WORLD
相關推薦
利用python的pickle模組儲存和讀寫任意的python資料結構
上文中提到PyQt的QDataStream類對Python型別和PyQt型別的資料進行讀寫操作,同樣python自身提供了標準pickle模組可對任意的python資料結構進行儲存和讀寫,當然pickle模組可以對Qt的資料型別進行儲存和讀寫。其實QDataSt
注入mssql後使用儲存過程讀寫任意檔案
建立讀寫二進位制檔案的儲存過程,內容如下: /*--bcp-二進位制檔案的匯入匯出,呼叫示例 : create table tb (img image); --資料匯入 exec sp_binaryIO '.', 'sa', '', 'test..tb', 'i
利用Amoeba實現MySQL主從復制和讀寫分離
生產環境 層級 cal 目錄名 發現 slaves zxvf 同步服務 code 在實際生產環境中,如果對數據庫的讀和寫都在同一個數據庫服務器中操作,無論是在安全性、高可用性,還是高並發等各個方面都是完全不能滿足實際需求的,因此,一般來說都是通過主從復制(Master-Sl
HDFS分散式儲存架構和讀寫機制總結
如上圖所示,HDFS也是按照Master和Slave的結構。分NameNode、SecondaryNameNode、DataNode這幾個角色。 NameNode:是Master節點,是大領導。管理資料塊對映;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;
Android AsyncHttpClient登入儲存cookie和讀寫cookie
AsyncHttpClient有個特性:(11)持久化cookie儲存,可以將cookie儲存到你的應用程式的SharedPreferences中AsyncHttpClient Cookie相關的官方的文件This library also includes a Persis
利用多租戶模式演化成分庫分表和讀寫分離
前言 最近兩週我都發了隨筆寫關於利用EF core實現多租戶,並且給出了一些關於EF 自動遷移的內容。 這個系列的隨筆是想要把這部分的程式碼優化和做成類庫的。 我已經整理和抽象好了,本來想介紹一下整理的思路的。但後來發現這裡的程式碼量太少了,好像沒什麼可以說的。 所以這篇隨筆會講解利用這個類庫可以實現的功能。
剖析Elasticsearch集群系列第一篇 Elasticsearch的存儲模型和讀寫操作
推薦 arch 變更 git 排序。 _id 包含 doc 現在 剖析Elasticsearch集群系列涵蓋了當今最流行的分布式搜索引擎Elasticsearch的底層架構和原型實例。 本文是這個系列的第一篇,在本文中,我們將討論的Elasticsearch的底層存儲模型及
proxysql安裝配置和讀寫分離初識
tps select block use nod gre match iad 分組 前言 筆者從事MySQL的相關工作,最近線上需要一款性能上佳的MySQL中間件產品,本人在了解一些如ProxySQL、MariaDB MaxScale、MySQL Router、Atla
最全mysql的復制和讀寫分離
最全 產生 程序 數據不一致 技術 server1 per 保存 ignore mysql的復制和mysql的讀寫分離從來就不是一個簡單的話題,今天筆者就詳細來記錄一下我學習的mysql。 mysql日至類型有:二進制日誌,事務日誌,錯誤日誌,一般查詢日誌,中繼日誌,慢
數據庫主從復制和讀寫分離
其中 select htm targe 方式 文檔 size 打開 salve 參考文檔: http://www.cnblogs.com/crazylqy/p/5542558.html http://www.cnblogs.com/gl-developer/p/617042
samba共享目錄無法訪問的一般解決方案,非用戶登錄和讀寫權限問題
isa 用戶名 轉載 fedora 讀寫權限 sysconfig samba共享 path rc.d 配smb,被第四點坑了很久,特此轉載。 由於這5點都是比較普通的情況,不涉及用戶登錄和讀寫權限問題 1)關閉防火墻: #sevice iptables stop
Linux下mysql基於MyCat實現主從復制和讀寫分離
mycat1.1 MyCat介紹及應用場景MyCat介紹MyCat是一個開源的分布式數據庫系統,是一個實現了MySQL協議的服務器,前端用戶可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其後端可以用MySQL原生協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器
ReentrantLock和讀寫鎖
輪詢 兩個 對象 ret 異常 sed 5.0 之前 有效 在Java5.0之前,只有synchronized(內置鎖)和volatile. Java5.0後引入了顯示鎖ReentrantLock. ReentrantLock概況 ReentrantLock是可重入的鎖
hadoop學習筆記(三):hdfs體系結構和讀寫流程(轉)
sim 百萬 服務器 發表 繼續 什麽 lose 基於 一次 原文:https://www.cnblogs.com/codeOfLife/p/5375120.html 目錄 HDFS 是做什麽的 HDFS 從何而來 為什麽選擇 HDFS 存儲數據 HDFS
Django ORM 數據庫設置和讀寫分離
disable 其余 格式 sql details ans turn rand microsoft 一、Django的數據庫配置 (一)修改settings.py文件關於數據庫的配置: Django默認使用sqlite: # Django默認的數據庫庫,SQLit配置
Linux多執行緒程式設計---執行緒間同步(互斥鎖、條件變數、訊號量和讀寫鎖)
本篇博文轉自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了多種方式來處理執行緒同步,最常用的是互斥鎖、條件變數、訊號量和讀寫鎖。 下面是思維導
2.HBase_儲存與讀寫流程
我們看到HBase叢集的物理模型,包括:Client、ZooKeeper、HMaster、HRegionServer、HLog、HRegion、Store、StoreFile、MemStore。對於HBase,它的元資料存放在ZooKeeper中,真實資料存放在MemFile(記憶體)和S
MySQL主從分割槽和讀寫分離
MySQL主從分割槽、讀寫分離、負載均衡 一個MySQL的伺服器的承載連線的數量是有限的,當超出最大連線數之後,MySQL伺服器就會出現異常或者宕機。 再者,伺服器也可能會壞掉(比如硬碟壞了),這時資料會丟失,所以我們需要考慮資料庫的主從分割槽。 一般大型網站都是讀多寫少,實現讀寫分
多執行緒設計模式:第三篇 - 生產者-消費者模式和讀寫鎖模式
一,生產者-消費者模式 生產者-消費者模式是比較常見的一種模式,當生產者和消費者都只有一個的時候,這種模式也被稱為 Pipe模式,即管道模式。 &nb
Java併發程式設計(10)-顯式鎖和讀寫鎖的使用
文章目錄 一、顯式鎖 1.1、什麼是顯式鎖 1.2、Lock和ReentrantLock 1.3、如何使用顯示鎖 二、讀寫鎖 2.1、為什麼使用讀寫鎖