所有程式執行的過程即使用編寫的程式指令來排程運算特定資料,運算過程在記憶體中,記憶體並非永久性儲存,當我們斷電或關機後,記憶體中資料會丟失,當我們需要將某個狀態儲存,我們就會用到物件持久化。物件持久化有以下幾種方式:扁平檔案、pickle、shelve、資料庫、drm
1.扁平檔案
使用檔案將當前執行狀態儲存下來,這種方式容易出錯,實際開發中不常用
eval( ):python 內建函式,可以將字串轉為python表示式
scores=[88
,99,77
,55]def write_scores()
: with open
('data_list.txt'
,'w'
,encoding=
'utf8'
) as f:
f.write
(str
(scores)
)print
('檔案寫入完成'
)def read_scores()
: with open
('data_list.txt'
,'r'
,encoding=
'utf8'
) as f:
lst=
eval
(f.read()
)
2.pickle應用
可以將多個物件存入乙個檔案,並從檔案中將多個物件分離出來
import shelve
scores=[99
,88,77
]student=
db=shelve.
open
('shelve_student'
)//宣告乙個資料庫
db['s'
]=student
db['scores'
]=scores
>>
>
len(db)
2>>
>temp_student=db[
's']
>>
>temp_student
>>
>db[
'scores'][
99,88,
77]>>
>del db[
'scores'
]//刪除db中的scores一項
和字串相關主要有三類,分別為str字串、bytes位元組、bytearray位元組陣列
亂碼原因:編碼和解碼所用字元編碼不同
字元編碼結構:字符集:賦值乙個編碼到某個字元,以便在記憶體中表示
編碼encoding:轉換字元到原始位元組形式
節碼decoding:依據編碼名稱轉換原始位元組到字元的過程
字串儲存:編碼值作用於檔案儲存或中間媒介轉換時,記憶體中總是儲存解碼以後的文字。
字串、位元組、位元組陣列之間的轉換
1.字串與位元組之間的轉換
主要有三種方式:
手動宣告:b』』
字元出編碼:str.encode()
建構函式:bytes()
open
('data.txt'
,'rb').
read()
//檔案以二進位制讀取
b=b'abc'
s1='abc'
s1.encode
('ascii'
)bytes
('abc'
,'ascii'
)
【注】位元組不支援原位改變
2.字串與位元組陣列之間的轉換
bytearray(『字元』,『編碼』)
bytearray.decode():解碼為字串
>>
>s1=
'abc'
>>
>ba=
bytearry
(s,'utf8'
)>>
>ba[0]
97>>
>ba[0]
=98>>
>ba
bytearray
(b'bbc'
)>>
>ba.
decode
('utf8'
)
【注】位元組陣列支援原位改變
bom處理
bom即byte order mark 位元組順序標識
open
('data.txt'
,'r'
,encoding=
'utf-8-sig').
read()
//-sig表示檔案中若有標記,忽略它
open
('data.txt'
,'w'
,encoding=
'utf-8-sig').
write
('abc'
)//-sig表示寫檔案是加入位元組標記
物件持久化
物件持久化 ifname main read scores pickle 將字典表序列化成字串pickle.dumps 字串變回字典用pickle.loads s import pickle person s pickle.dumps person 序列化 p pickle.loads s 恢復 序...
字串物件python int 字串 字串物件
最近研究字串物件,稍微總結一下,以後繼續補充 如果我們須要把python的字串物件轉換為數整物件,我們須要用到int方法。比如 ainfo 222 print int ainfo 輸出的結果是222。然後我們檢視下ainfo在現的型別,通過type方法檢視下,發現是 而如果ainfo fefew22...
字串和物件互轉
json.stringfy 語法 json.stringify value replacer space 情況一 replacer為陣列時,通過後面的實驗可以知道,它是和第乙個引數value有關係的。一般來說,系列化後的結果是通過鍵值對來進行表示的。所以,如果此時第二個引數的值在第乙個存在,那麼就以...