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
中即可還原出我們原本的資料
其實shelves
和pickle
非常的類似且,檔案也能儲存的檔案結構也非常的類似,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之間的傳輸),也了解到了pickle
,shelve
等位元組流儲存方案,這些方案都幫助我們實現本地的資料持久化
iOS資料持久化方案
在ios開發中,有很多資料持久化的方案,接下來說一下常用的5種方案 plist檔案 屬性列表 preference 偏好設定 nskeyedarchiver 歸檔 sqlite coredata plist檔案是將某些特定的類,通過xml檔案的方式儲存在目錄中。void plist 讀取文字 nss...
重讀iOS 資料持久化1 持久化方案介紹
內存在斷點後就會清空重置,為了保持資料在斷點後保持,比如手機重啟,就需要把資料存放在硬碟裡,做持久化的儲存。為什麼不一直使用硬碟儲存,因為記憶體會比硬碟更快速。所以在程式的宣告週期裡,資料載入在記憶體裡,進行快速的計算,然後把需要持久儲存的資料儲存到硬碟裡。資料持久化就是怎麼把資料儲存到硬碟裡的技術...
redis的持久化方案
redis資料庫資料都放在記憶體中。如果機器 掛掉,記憶體資料就不存在了。redis的持久化方案 1.rdb 快照形式 定期將當前時刻的資料儲存到磁碟中,生成乙個dump.rdb的檔案。優點就是效能較好,資料備份。缺點是,在下次自動儲存之前,中間如果有資料存入到redis中,redis會丟失資料。因...