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

Python內(nèi)置json實現(xiàn)數(shù)據(jù)本地持久化詳解

 更新時間:2025年03月05日 10:00:52   作者:靜香還需努力  
這篇文章主要為大家詳細介紹了Python如何通過內(nèi)置json實現(xiàn)數(shù)據(jù)本地持久化,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

四個json函數(shù)

函數(shù)
json.load()將本地json數(shù)據(jù)文件讀取出來,并以列表形式返回從文件對象中讀取 JSON 格式的字符串,并將其反序列化為 Python 對象
json.loads()將 JSON 格式的字符串反序列化為 Python 對象
json.dump()將 Python 對象序列化為 JSON 格式的字符串,并將其寫入文件對象。
json.dumps()將 Python 對象序列化為 JSON 格式的字符串

將數(shù)據(jù)以json文件保存在本地的方式

使用file.open()

實例數(shù)據(jù)

class Person:
    name = None
    age = None
    def __init__(self, name, age):
        self.name = name
        self.age = age

person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
person3 = Person("Charlie", 35)
person4 = Person("David", 28)
person5 = Person("Eve", 32)

persons = [person1, person2, person3, person4, person5]
person_list = [person.__dict__ for person in persons]
print(person_list)

'''
[{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}, {'name': 'David', 'age': 28}, {'name': 'Eve', 'age': 32}]
<class 'list'>

返回的是一個列表
'''

object.__dict__

object.__dict__ 是 Python 中的一個特殊屬性,用于存儲對象的實例屬性。每個 Python 對象都有一個 __dict__ 屬性,它是一個字典,包含了對象的所有實例屬性及其對應(yīng)的值

將對象的數(shù)據(jù)保存到j(luò)son中,需要先使用對象.__dict__將每一個對象的字典形式取出(使用列表推導(dǎo)式),在將每一個對象的字典形式保存在列表中,將列表保存在json文件中

data_list = [person.__dict__ for person in persons] # 列表推導(dǎo)式

保存數(shù)據(jù)

def load_data():
    with open(data_file, 'r', encoding='utf-8') as file:
        return json.load(file)

讀取數(shù)據(jù)

def save_data(persons):
    with open(data_file, 'w', encoding='utf-8') as file:
        json.dump([person.__dict__ for person in persons], file, indent=2)

注意事項

open() 函數(shù)自動創(chuàng)建文件:

'r' 模式(只讀模式)下,如果文件不存在,會直接拋出 FileNotFoundError,不會自動創(chuàng)建文件。

只有使用'w'(寫入模式)或 'a'(追加模式)時,如果文件不存在,才會自動創(chuàng)建。

實際案例:

class HouseService:
    house_list = []
    data_file = os.path.join(os.path.dirname(__file__), 'house_data.json')
    def __init__(self):
        self.load_data()
        if not self.house_list:
            house1 = House('1', 'lihua', '123456', '鄭州中原區(qū)', 800, '未出租')
            house2 = House('2', 'jack', '123452', '鄭州市二七區(qū)', 900, '未出租')
            self.house_list.append(house1)
            self.house_list.append(house2)
            self.save_data()

    
    # 加載房屋數(shù)據(jù)
    def load_data(self):
        try:
            with open(self.data_file, 'r', encoding='utf-8') as file:
                data = json.load(file)
                self.house_list = [House(**house) for house in data]
        except FileNotFoundError:
            self.house_list = []
    
    # 保存房屋數(shù)據(jù)
    def save_data(self):
        with open(self.data_file, 'w', encoding='utf-8') as file:
            json.dump([house.__dict__ for house in self.house_list], file, ensure_ascii=False, indent=4)

在此案例下,load_data()函數(shù)如果不采用異常捕獲的話,且文件夾中并沒有house_data.json文件時,系統(tǒng)將直接拋出異常,當(dāng)捕獲異常之后,并初始化數(shù)據(jù)列表,程序可以繼續(xù)向下進行,來到save_data()保存數(shù)據(jù),并自動創(chuàng)建json文件

所以在開發(fā)過程中,編寫保存房屋數(shù)據(jù)時,注意異常捕獲

追加數(shù)據(jù)

如果有新的數(shù)據(jù)需要保存,不能直接使用mode='a', 'a'模式追加寫入,會導(dǎo)致JSON文件變成多個獨立對象而不是有效數(shù)組,新追加的數(shù)據(jù)會直接保存在[]外面

[{...}, {...}]  // 原始數(shù)據(jù)
{...}           // 新追加數(shù)據(jù)(格式錯誤)

所以要向json文件中追加數(shù)據(jù),需要用到一下方法:

采用讀取→修改→覆蓋寫入的模式(而不是直接追加)

使用'w'模式保證每次寫入完整的JSON數(shù)組結(jié)構(gòu)

import os
import json

# 示例數(shù)據(jù)
data = {
    "name": "Alice",
    "age": 30,
    "skills": ["Python", "Docker"],
    "is_active": True
}

data_dile = os.path.join(os.path.dirname(__file__), 'person_data.json')

def save_data(data):
    with open(data_dile, 'w', encoding='utf-8') as file:
        json.dump(data, file, indent=2)

def load_data():
    with open(data_dile, 'r', encoding='utf-8') as file:
        data = json.load(file)
        return data

exist_data = load_data() # 取出現(xiàn)有數(shù)據(jù)
print(type(exist_data))	# <class 'list'>
exist_data.append(data)	# 想列表中追加數(shù)據(jù)
save_data(exist_data) # 保存追加過數(shù)據(jù)后的列表

到此這篇關(guān)于Python內(nèi)置json實現(xiàn)數(shù)據(jù)本地持久化詳解的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)本地持久化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 幫你快速上手Jenkins并實現(xiàn)自動化部署

    幫你快速上手Jenkins并實現(xiàn)自動化部署

    在未學(xué)習(xí)Jenkins之前,只是對Jenkins有一個比較模糊的理解,即Jenkins是一個自動化構(gòu)建項目發(fā)布的工具,可以實現(xiàn)代碼->github或者gitlab庫->jenkins自動部署->訪問的整體的過程,而無需人為重新打包,今天就帶大家詳細了解一下,幫你快速上手Jenkins,需要的朋友可以參考下
    2021-06-06
  • 如何基于pythonnet調(diào)用halcon腳本

    如何基于pythonnet調(diào)用halcon腳本

    這篇文章主要介紹了如何基于pythonnet調(diào)用halcon腳本,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • python使用Akshare與Streamlit實現(xiàn)股票估值分析教程(圖文代碼)

    python使用Akshare與Streamlit實現(xiàn)股票估值分析教程(圖文代碼)

    入職測試中的一道題,要求:從Akshare下載某一個股票近十年的財務(wù)報表包括,資產(chǎn)負債表,利潤表,現(xiàn)金流量表,保存到本地Csv文件,對該公司進行財務(wù)分析,如提取近五年,營業(yè)收入,凈利潤數(shù)據(jù),并且算出同比增長,通過Pandas處理、Matplotlib可視化及Streamlit部署,實現(xiàn)財務(wù)數(shù)據(jù)分析
    2025-08-08
  • Python爬蟲實現(xiàn)抓取京東店鋪信息及下載圖片功能示例

    Python爬蟲實現(xiàn)抓取京東店鋪信息及下載圖片功能示例

    這篇文章主要介紹了Python爬蟲實現(xiàn)抓取京東店鋪信息及下載圖片功能,涉及Python頁面請求、響應(yīng)、解析等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • Python學(xué)習(xí)入門之區(qū)塊鏈詳解

    Python學(xué)習(xí)入門之區(qū)塊鏈詳解

    區(qū)塊鏈的基礎(chǔ)概念很簡單:一個分布式數(shù)據(jù)庫,存儲一個不斷加長的 list,list 中包含著許多有序的記錄。下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)入門之區(qū)塊鏈的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面來一起看看吧。
    2017-07-07
  • NumPy 數(shù)組拼接與分割的使用詳解

    NumPy 數(shù)組拼接與分割的使用詳解

    NumPy 提供了多種方法用于??數(shù)組拼接??和??分割,這些操作在數(shù)據(jù)預(yù)處理、特征工程和結(jié)果整合中至關(guān)重要,下面就來詳細的介紹一下NumPy 數(shù)組拼接與分割的使用,感興趣的可以了解一下
    2026-01-01
  • 使用llama?Index幫你訓(xùn)練pdf的示例詳解

    使用llama?Index幫你訓(xùn)練pdf的示例詳解

    這篇文章主要為大家介紹了使用llama?Index?幫你訓(xùn)練pdf,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python分支語句與循環(huán)語句應(yīng)用實例分析

    Python分支語句與循環(huán)語句應(yīng)用實例分析

    這篇文章主要介紹了Python分支語句與循環(huán)語句應(yīng)用,結(jié)合具體實例形式詳細分析了Python分支語句與循環(huán)語句各種常見應(yīng)用操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2019-05-05
  • Python中包的用法及安裝

    Python中包的用法及安裝

    在本篇文章里小編給大家整理的是關(guān)于Python中一些包的基本用處和安裝方法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • Django中使用AJAX的詳細過程

    Django中使用AJAX的詳細過程

    在項目中前后端數(shù)據(jù)相互是一種常態(tài),下面這篇文章主要給大家介紹了關(guān)于Django中使用AJAX的詳細過程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11

最新評論

沁阳市| 大姚县| 肇庆市| 黑龙江省| 驻马店市| 大荔县| 丰台区| 融水| 分宜县| 嘉兴市| 尤溪县| 邹平县| 霞浦县| 临沂市| 多伦县| 翁牛特旗| 寻甸| 新龙县| 剑川县| 郁南县| 西峡县| 贵溪市| 绍兴县| 南郑县| 灌云县| 乌恰县| 天等县| 体育| 天峨县| 神池县| 彝良县| 徐州市| 类乌齐县| 驻马店市| 车险| 洛宁县| 伊宁县| 仙居县| 高陵县| 张家川| 阳城县|