python高階丨IO程式設計 序列化

2021-10-01 18:17:09 字數 2961 閱讀 3898

變數從記憶體中變成可儲存或傳輸的過程稱之為序列化

百科:物件的狀態資訊轉換為可以儲存或傳輸的形式的過程

通俗解釋:序列化是把其他資料型別轉換城字串或bytes

能夠在檔案裡儲存的只有bytes和str,能夠在網路上傳輸的只能是bytes。

a.以某種儲存形式使自定義物件持久化

b.將物件從乙個地方傳遞到另乙個地方

c.使程式更具維護性

python提供了pickle模組來實現序列化

import pickle

data =[1

,2,3

,4]det_str = pickle.dumps(data)

print

(det_str)

# 輸出結果:b'\x80\x03]q\x00(k\x01k\x02k\x03k\x04e.'

pickle.dumps()方法把任意物件序列化成乙個bytes,就可以把這個bytes寫入檔案

也可以使用pickle.dump()直接把物件序列化後寫入

import pickle

data =[1

,2,3

,4]with

open

('dump.txt'

,'wb'

)as f:

pickle.dump(d, f)

dump.txt檔案亂碼內容便是python儲存的物件內部資訊

讀取的時候,可以使用pickle.loads()方法反序列化出物件

import pickle

with

open

('dump.txt'

,'rb'

)as f:

det_str = f.read(

) data = pickle.loads(det_str)

print

(data)

# 輸出結果:[1,2,3,4]

也可以使用pickle.load()方法從乙個file-like object中直接反序列化出物件

import pickle

with

open

('dump.txt'

,'rb'

)as f:

data = pickle.load(f)

print

(data)

# 輸出結果:[1,2,3,4]

在不同的程式語言之間傳遞物件,必須要把物件序列化為標準格式。json表示出來就是乙個字串,可以被所有語言讀取。

python內建的json模組提供了完善的python物件到json格式的轉換

import json

data =[1

,2,3

,4]data_json = json.dumps(data)

print

(data_json)

print

(type

(data_json)

)

輸出結果

[1,

2,3,

4]<

class

'str'

>

同樣,通過json.dump()方法可以直接把json寫入

import json

person_dict =

with

open

('person.txt'

,'w'

)as json_file:

json.dump(person_dict, json_file)

dumps()和dump()區別a.dump()不需要使用write()方法,只需要寫哪個字典、哪個檔案即可;dump()需要使用write()方法寫入

b.如果把字典寫到檔案裡面的時候,dump()好用;如果不需要操作檔案,或需要把內容存到資料庫和excel,則需要使用dumps()先把字典轉成字串,再寫入

把json反序列化為python物件,用loads()或者對應的load()方法

import json

json_str =

'[1,2,3,4]'

data = json.loads(json_str)

print

(data)

print

(type

(data)

)

輸出結果i

[1,

2,3,

4]<

class

'list'

>

load()方法

import json

with

open

('person.txt'

,'r'

)as f:

data = json.load(f)

python語言特定的序列化模組是pickle,但如果想讓序列化更統統,更符合web標準,就要使用jsonloads()和load()區別a.loads()傳的是字串,而load()傳的是檔案物件

b.使用loads()時需要先讀取檔案再使用,而load()則不用

Python高階丨IO程式設計 操作檔案和目錄

python內建的os模組可以直接呼叫作業系統給提供的介面函式 import os print os.name 輸出結果 nt輸出nt表明是windows系統,輸出posix表明是linux unix或mac os x 系統。獲取詳細的系統資訊,可以呼叫uname 函式,不過uname 函式在 wi...

Python 高階程式設計與非同步IO併發程式設計!

python中一切皆物件 動態語言和靜態語言 1.python中面對物件更徹底,在 python 中 class 魔法函式,包括 和模組都可以是物件,讓動態語言的特性得到充分的體現 2.函式和類也是物件,屬於一等公民 python資源共享群 626017123 def ask name bobby ...

高階程式設計 檔案io

檔案描述符 所有開啟的檔案通過檔案描述符引用,檔案描述符是乙個非負整數。當開啟或建立乙個新檔案時,核心向程序返回檔案描述符。1.open函式 int open const char 檔名,int oflag,建立時使用第三個引數 返回值 成功返回檔案描述符,出錯返回 1.開啟方式 oflag 1.o...