Python中的持久化資料方案

2021-10-24 04:14:55 字數 2549 閱讀 6016

python中不管你是list,str,dict等資料,我們都只能在記憶體中使用,一旦軟體發生意外,或資料未及時儲存,就會導致我們的資料無法恢復,於是我們這節準備了3個持久化資料的方案,其中包括一些python的高階用法

是的你沒有看錯,在普通的教程中print我們只是用來列印輸出的,而input是用來輸入的,而用於資料的持久化中可以用來儲存資料

演示

a =

f =open

('a'

,'w'

)print

(a,file

=f)f.close(

)f =

open

('a'

,'r'

)import sys

sys.stdin = f

obj =

eval

(input()

)print

(obj[

'name'])

f.close(

)

資料儲存在本地的狀態

通過給print指定file引數後,原本應在控制台輸出的內容,現在變成了字串形式儲存到了本地

使用input讀取內容時,需用sys.stdin指定讀取的檔案物件,每input一次則為讀取一行

方法比較另類,也存在一些問題,比如:物件是無法儲存的,實際作用是控制台列印什麼那麼檔案就會儲存什麼,因此是無法儲存物件的,而且使用eval本來就是十分不安全的做法

pickle作為python專用的序列化手段可以將物件完整的轉化為位元組流,儲存到本地,這不失為一種非常好的資料持久化方案

**演示

我們的資料會以位元組流的方案儲存在本地,分為3個檔案

f =

open

('a'

,'rb'

)obj = pickle.load(f)

print

(obj[

'name'])

f.close(

)

反序列化也是非常的簡單,只需要將檔案物件傳入load中即可還原出我們原本的資料

其實shelvespickle非常的類似且,檔案也能儲存的檔案結構也非常的類似,shelves就是將dict,open,pickle封裝在一起的產物

**實驗

import shelve

class

person

(object):

def__init__

(self, name, age, pay)

: self.name = name

self.age = age

self.pay = pay

defset_pay

(self, money)

: self.pay = money

def__str__

(self)

:return

'name:{} age:{} pay:{}'

.format

(self.name, self.age, self.pay)

persons = shelve.

open

('persons'

)persons[

'yxhpy'

]= person(

'yxhpy',21

,4000

)persons.close(

)persons = shelve.

open

('persons'

)print

(persons[

'yxhpy'])

persons.close(

)

在上述例子中我們用乙個檔案用來管理人,只需輸入對應的key即可非常方便的建立和找到對應的人,相比pickle簡化了非常多

本節我們不僅了解到了print,input的特殊用法,也對python特有的序列化方案進行了了解,(這裡的特有是指僅僅支援python之間的傳輸),也了解到了pickleshelve等位元組流儲存方案,這些方案都幫助我們實現本地的資料持久化

iOS資料持久化方案

在ios開發中,有很多資料持久化的方案,接下來說一下常用的5種方案 plist檔案 屬性列表 preference 偏好設定 nskeyedarchiver 歸檔 sqlite coredata plist檔案是將某些特定的類,通過xml檔案的方式儲存在目錄中。void plist 讀取文字 nss...

重讀iOS 資料持久化1 持久化方案介紹

內存在斷點後就會清空重置,為了保持資料在斷點後保持,比如手機重啟,就需要把資料存放在硬碟裡,做持久化的儲存。為什麼不一直使用硬碟儲存,因為記憶體會比硬碟更快速。所以在程式的宣告週期裡,資料載入在記憶體裡,進行快速的計算,然後把需要持久儲存的資料儲存到硬碟裡。資料持久化就是怎麼把資料儲存到硬碟裡的技術...

redis的持久化方案

redis資料庫資料都放在記憶體中。如果機器 掛掉,記憶體資料就不存在了。redis的持久化方案 1.rdb 快照形式 定期將當前時刻的資料儲存到磁碟中,生成乙個dump.rdb的檔案。優點就是效能較好,資料備份。缺點是,在下次自動儲存之前,中間如果有資料存入到redis中,redis會丟失資料。因...