物件持久化和字串

2021-10-03 11:47:21 字數 3036 閱讀 7079

所有程式執行的過程即使用編寫的程式指令來排程運算特定資料,運算過程在記憶體中,記憶體並非永久性儲存,當我們斷電或關機後,記憶體中資料會丟失,當我們需要將某個狀態儲存,我們就會用到物件持久化。物件持久化有以下幾種方式:扁平檔案、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有關係的。一般來說,系列化後的結果是通過鍵值對來進行表示的。所以,如果此時第二個引數的值在第乙個存在,那麼就以...