最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)序列化和固化存儲的方式

 更新時間:2026年03月06日 09:42:39   作者:TomDeng66  
數(shù)據(jù)序列化就是把內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)(如列表、字典、對象) 轉(zhuǎn)換成可以存儲(如寫入文件)或傳輸(如網(wǎng)絡(luò)發(fā)送)的格式,本文給大家介紹Python數(shù)據(jù)序列化和固化存儲的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧

數(shù)據(jù)序列化就是把內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)(如列表、字典、對象) 轉(zhuǎn)換成可以存儲(如寫入文件)或傳輸(如網(wǎng)絡(luò)發(fā)送)的格式;反序列化則是把這個格式還原回原來的數(shù)據(jù)結(jié)構(gòu)。

在python中常見的序列化方式有:JSON、pickle

JSON 序列化

JSON 是跨語言的輕量級格式,適合和其他語言(如 Java、JavaScript)交互,但僅支持 Python 的基礎(chǔ)數(shù)據(jù)類型:strint、floatlist、dictbool、None。

核心函數(shù)

  • json.dumps():把數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成 JSON 字符串(內(nèi)存中)
  • json.dump():把數(shù)據(jù)結(jié)構(gòu)直接寫入文件(序列化到文件)
  • json.loads():把 JSON 字符串還原成 Python 數(shù)據(jù)結(jié)構(gòu)(反序列化)
  • json.load():從文件讀取 JSON 并還原(反序列化)

json.dumps()

import json
d1 = {'name':'Tomdeng','age':18}
# dict --> json
d1_str = json.dumps(d1)
print(d1) # {'name': 'Tomdeng', 'age': 18}
print(d1_str)  # {"name": "Tomdeng", "age": 18}
print(type(d1_str))  <class 'str'>

json.dump()

import json
d1 = {'name':'Tomdeng','age':18}
f = open("json_test.txt","w+")
json.dump(d1,f)
f.seek(0)
print(f.read())  # {"name": "Tomdeng", "age": 18}
f.close()

json.loads()

import json
d1_str = '{"name":"Tomdeng","age":18}'
d1 = json.loads(d1_str)
print(d1_str) # {"name":"Tomdeng","age":18}
print(d1) # {'name': 'Tomdeng', 'age': 18}
print(type(d1))  # <class 'dict'>

json.load()

import json
f = open("json_test.txt","r")
d1 = json.load(f)
print(d1)   # {'name': 'Tomdeng', 'age': 18}
print(type(d1))  #  <class 'dict'>
f.close()

注意:

  • JSON 的鍵必須是字符串,Python 字典的非字符串鍵會被自動轉(zhuǎn)成字符串;
  • 不支持 Python 的自定義對象、tuple(會被轉(zhuǎn)成列表)、set等類型。

pickle 序列化

pickle 是 Python 特有的序列化方式,支持所有 Python 數(shù)據(jù)類型(包括自定義對象、函數(shù)、類),但無法跨語言使用,且序列化后的是二進(jìn)制數(shù)據(jù)。

核心函數(shù)

  • pickle.dumps():轉(zhuǎn)成二進(jìn)制字符串
  • pickle.dump():寫入文件(二進(jìn)制模式)
  • pickle.loads():還原二進(jìn)制字符串
  • pickle.load():從二進(jìn)制文件還原

pickle.dumps()

import pickle
d1 = {'name':'Tomdeng','age':18}
d1_binary = pickle.dumps(d1)
print(type(d1_binary))

pickle.dump()

import pickle
d1 = {'name':'Tomdeng','age':18}
f = open("pickle_test","wb")
pickle.dump(d1,f)
f.close()

pickle.loads()

import pickle
d1 = {'name':'Tomdeng','age':18}
d1_binary = pickle.dumps(d1)
d2 = pickle.loads(d1_binary)
print(d2)  # {'name': 'Tomdeng', 'age': 18}
print(type(d2))  #  <class 'dict'>

pickle.load()

import pickle
f= open("pickle_test","rb")
d1 = pickle.load(f) 
print(d1)   # {'name': 'Tomdeng', 'age': 18}
print(type(d1))  # <class 'dict'>

固化存儲

通過open("file_name","type")來對文件進(jìn)行操作,將內(nèi)存中的數(shù)據(jù)保存在磁盤中(內(nèi)存中的數(shù)據(jù)當(dāng)程序結(jié)束或主機關(guān)閉時將被釋放)

同時可以通過encoding字符集

參數(shù)

  • r 只讀
  • w 覆蓋寫
  • a 追加寫

r+ / w+ /a+ 的區(qū)別

模式文件不存在文件已存在初始指針位置寫入行為關(guān)鍵特點
r+報錯保留原有內(nèi)容文件開頭覆蓋指針位置的內(nèi)容適合「讀取 + 修改」已有文件,不會清空原內(nèi)容
w+創(chuàng)建新文件清空原有內(nèi)容文件開頭從開頭寫入(覆蓋)適合「先寫后讀」,但會清空原文件
a+創(chuàng)建新文件保留原有內(nèi)容文件末尾始終追加到末尾適合「讀取 + 追加」,寫入不會覆蓋原有內(nèi)容

默認(rèn)r/w/a后面有一個文本類型為t(普通文本),如果需要操作的文件是二進(jìn)制文本,要在后面添加b,如“rb”

相關(guān)方法

# fp.read(5) 按照字節(jié)數(shù)開始讀 讀和寫都是在文件指針后開始讀寫
# fp.seek(0) 重置光標(biāo)位置為開頭
# fp.readline() 從光標(biāo)的位置讀到行尾
# fp.readlines() 默認(rèn)從光標(biāo)位置讀到文件末尾,按行存放到列表中
# fp.readlines(4) 讀取到累計字符數(shù) > 4的行
# for i in fp:
	print("一行一行讀",i	)
# fp.close()  關(guān)閉打開的文件,釋放資源

注意:

with open(…) as f:是文件操作的最優(yōu)寫法,自動關(guān)閉文件句柄,無需手動調(diào)用f.close()

實例

with open("user.txt","r+",encoding="utf-8") as f:
    print(f.readlines())

輸出

['{"tom": {"username": "tom", "password": "123456", "age": "20", "sex": "man"}}']

練習(xí)

登錄系統(tǒng)
1.注冊 輸入賬號和密碼 年齡,性別
    判斷是否存在
2.登錄 輸入賬號和密碼
    判斷賬戶是否存在,密碼是否正確
3.退出

解題:

import json
fr = open("user.txt","r")
str = fr.read()
fr.close()
if  str != "" :
    d1 = json.loads(str)
else:
    d1 = dict()
while True:
    choice = input("1.注冊\t2.登錄\t3.退出\n")
    match choice:
        case "1":
            username,password,age,sex = input("請輸入用戶名,密碼,年齡,性別\n").split()
            if username in  d1:
                print("用戶已存在")
            else:
                d1[username] = {"username":username,"password":password,"age":age,"sex":sex}
        case "2":
            username,password = input("請輸入用戶名和密碼\n").split()
            if username not in d1:
                print("用戶不存在\n")
            elif d1[username]["password"] != password:
                print("密碼錯誤\n")
            else:
                print("登錄成功")
        case "3":
            str1 = json.dumps(d1)
            fw = open("user.txt", "w")
            fw.write(str1)
            fw.close()
            print("退出成功")
            break

到此這篇關(guān)于Python數(shù)據(jù)序列化和固化存儲的方式的文章就介紹到這了,更多相關(guān)python數(shù)據(jù)序列化和固化存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python入門基本操作列表排序用法詳解

    Python入門基本操作列表排序用法詳解

    本篇文中主要介紹列表的基本的組成,怎么訪問列表、列表的切片、列表的排序、列表的添加、列表的刪除等內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • python?(pyqt)?表格顯示圖片的實現(xiàn)方式

    python?(pyqt)?表格顯示圖片的實現(xiàn)方式

    這篇文章主要介紹了python?(pyqt)?表格顯示圖片的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • opencv圖片處理常見操作方法總結(jié)

    opencv圖片處理常見操作方法總結(jié)

    這篇文章主要介紹了opencv圖片處理常見操作方法的相關(guān)資料,通過代碼示例,展示了如何對圖片進(jìn)行這些操作,并解釋了圖片在計算機中以數(shù)組形式存儲的原理,需要的朋友可以參考下
    2026-01-01
  • 解決Jupyter Notebook使用parser.parse_args出現(xiàn)錯誤問題

    解決Jupyter Notebook使用parser.parse_args出現(xiàn)錯誤問題

    這篇文章主要介紹了解決Jupyter Notebook使用parser.parse_args出現(xiàn)錯誤問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 使用Python?Seaborn創(chuàng)建熱力圖的制作指南

    使用Python?Seaborn創(chuàng)建熱力圖的制作指南

    熱力圖作為一種直觀的數(shù)據(jù)可視化工具,通過顏色深淺和漸變映射數(shù)據(jù)值,廣泛應(yīng)用于數(shù)據(jù)密度分析、趨勢挖掘和跨維度對比,本文將結(jié)合Python的seaborn庫,從熱力圖的核心原理到實際操作案例,逐步講解如何利用熱力圖揭示數(shù)據(jù)背后的隱藏規(guī)律,需要的朋友可以參考下
    2025-08-08
  • 基于Python實現(xiàn)一個簡單的注冊機并生成卡密

    基于Python實現(xiàn)一個簡單的注冊機并生成卡密

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個簡單而強大的注冊機,生成卡密來實現(xiàn)用戶注冊,從而輕松登錄應(yīng)用程序,有需要的小伙伴快可以參考下
    2023-12-12
  • Python借助 Spire.PDF for Python提取PDF圖片的終極指南

    Python借助 Spire.PDF for Python提取PDF圖片的終極指南

    PDF 文件中的圖片往往蘊藏著重要的信息,但提取它們的過程卻可能頗具挑戰(zhàn)性,本文將借助 Spire.PDF for Python高效地從 PDF 文檔中提取所需的圖片,感興趣的可以了解下
    2026-01-01
  • Python函數(shù)式編程

    Python函數(shù)式編程

    函數(shù)式編程Functional Programming,雖然也可以歸結(jié)到面向過程的程序設(shè)計,但其思想更接近數(shù)學(xué)計算。函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量。
    2017-07-07
  • Python深拷貝與淺拷貝用法實例分析

    Python深拷貝與淺拷貝用法實例分析

    這篇文章主要介紹了Python深拷貝與淺拷貝用法,結(jié)合實例形式分析了Python對象的復(fù)制、深拷貝、淺拷貝等操作原理、用法及相關(guān)注意事項,需要的朋友可以參考下
    2019-05-05
  • python之停止打印日志/重復(fù)打印日志方式

    python之停止打印日志/重復(fù)打印日志方式

    這篇文章主要介紹了python停止打印日志/重復(fù)打印日志方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

宜兰县| 建瓯市| 江华| 长沙县| 兴化市| 汝阳县| 本溪| 共和县| 大埔区| 武功县| 察哈| 渭南市| 青岛市| 余江县| 诏安县| 平山县| 洛扎县| 沾化县| 垣曲县| 五华县| 阿鲁科尔沁旗| 荣成市| 左云县| 吉木萨尔县| 林甸县| 额济纳旗| 海晏县| 新密市| 军事| 福清市| 江城| 娄底市| 伽师县| 孝感市| 宁陕县| 蕲春县| 德格县| 洛南县| 双江| 盖州市| 德清县|