1. 程式人生 > >利用python的pickle模組儲存和讀寫任意的python資料結構

利用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登入儲存cookiecookie

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、為什麼使用讀寫鎖