百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Python高效管理JSON文件:读写、更新、删除全攻略

liuian 2024-12-22 19:36 39 浏览

引言:

代码对 JSON 文件的常见操作(读取、写入、追加、删除、更新)的封装,每个方法都对常见的异常情况进行了处理,并且提供了详细的错误提示,失败的原因。

代码封装如下:

import json  #todo 导入json模块用于处理json数据

class JsonFileHandler:
    #todo 初始化函数,传入文件路径作为实例变量
    def __init__(self, file_path):
        self.file_path = file_path  #todo 文件路径存储在实例变量self.file_path中

    #todo 读取json文件并返回内容
    def read_json(self):
        try:
            with open(self.file_path, 'r', encoding='utf-8') as file:  #todo 以读取模式打开文件,确保使用utf-8编码
                data = json.load(file)  #todo 将文件内容加载为Python字典对象
            return data  #todo 返回读取到的数据
        except FileNotFoundError:  #todo 如果文件未找到
            print(f"Error: {self.file_path} not found.")  #todo 输出错误信息
            return None  #todo 返回None表示读取失败
        except json.JSONDecodeError:  #todo 如果文件内容不是有效的json格式
            print(f"Error: {self.file_path} is not a valid JSON file.")  #todo 输出格式错误信息
            return None

    #todo 将数据写入json文件
    def write_json(self, data):
        try:
            with open(self.file_path, 'w', encoding='utf-8') as file:  #todo 以写模式打开文件
                json.dump(data, file, indent=4, ensure_ascii=False)  #todo 将数据写入文件,格式化输出并保留中文字符
            print(f"Data successfully written to {self.file_path}.")  #todo 提示成功写入
        except Exception as e:  #todo 捕获其他可能的异常
            print(f"Error writing to file {self.file_path}: {e}")  #todo 输出异常信息

    #todo 向json文件中追加数据
    def append_to_json(self, data):
        try:
            #todo 打开文件读取数据,如果文件存在则读取,如果文件不存在则创建新文件
            with open(self.file_path, 'r+', encoding='utf-8') as file:
                try:
                    exist_data = json.load(file)  #todo 尝试读取已有数据
                except json.JSONDecodeError:  #todo 如果文件为空或格式错误,初始化为空列表
                    exist_data = []
                exist_data.append(data)  #todo 将新数据添加到已有数据中
                file.seek(0)  #todo 将文件指针移到文件开头
                json.dump(exist_data, file, indent=4, ensure_ascii=False)  #todo 写回数据,格式化输出
                file.truncate()  #todo 截断文件,以确保多余内容被删除
            print(f"Data successfully appended to {self.file_path}.")  #todo 提示成功追加
        except FileNotFoundError:  #todo 如果文件不存在
            with open(self.file_path, 'w', encoding='utf-8') as file:  #todo 创建新文件
                json.dump([data], file, indent=4, ensure_ascii=False)  #todo 将数据写入新文件
            print(f"File not found. New file created and data added to {self.file_path}.")  #todo 提示创建新文件并添加数据

    #todo 从json文件中删除指定的key
    def delete_from_json(self, key):
        try:
            with open(self.file_path, 'r', encoding='utf-8') as file:  #todo 打开文件读取数据
                data = json.load(file)  #todo 读取json数据
        except FileNotFoundError:  #todo 如果文件不存在
            print(f"Error: {self.file_path} not found.")  #todo 输出错误信息
            return
        except json.JSONDecodeError:  #todo 如果文件内容格式错误
            print(f"Error: {self.file_path} is not a valid JSON file.")  #todo 输出格式错误信息
            return

        if key in data:  #todo 如果字典中存在指定的key
            del data[key]  #todo 删除指定的key
            with open(self.file_path, 'w', encoding='utf-8') as file:  #todo 以写模式打开文件
                json.dump(data, file, indent=4, ensure_ascii=False)  #todo 将更新后的数据写回文件
            print(f"Key '{key}' successfully deleted from {self.file_path}.")  #todo 提示成功删除
        else:
            print(f"Key '{key}' not found in the file.")  #todo 如果key不存在,输出提示信息

    #todo 更新json文件中指定key的值
    def update_json(self, key, new_value):
        try:
            with open(self.file_path, 'r', encoding='utf-8') as file:  #todo 打开文件读取数据
                data = json.load(file)  #todo 读取json数据
        except FileNotFoundError:  #todo 如果文件不存在
            print(f"Error: {self.file_path} not found.")  #todo 输出错误信息
            return
        except json.JSONDecodeError:  #todo 如果文件内容格式错误
            print(f"Error: {self.file_path} is not a valid JSON file.")  #todo 输出格式错误信息
            return

        if key in data:  #todo 如果字典中存在指定的key
            data[key] = new_value  #todo 更新该key的值
            with open(self.file_path, 'w', encoding='utf-8') as file:  #todo 以写模式打开文件
                json.dump(data, file, indent=4, ensure_ascii=False)  #todo 将更新后的数据写回文件
            print(f"Key '{key}' successfully updated to '{new_value}'.")  #todo 提示成功更新
        else:
            print(f"Key '{key}' not found in the file.")  #todo 如果key不存在,输出提示信息


#todo 主程序入口
if __name__ == '__main__':
    #todo 示例:初始化JsonFileHandler对象并进行相关操作
    file_path = r"D:\AASEXCHDATE.json"  #todo 定义json文件路径
    json_handler = JsonFileHandler(file_path)  #todo 创建JsonFileHandler实例

    #todo 读取文件内容并输出
    data = json_handler.read_json()
    if data is not None:
        print(data)

    #todo 写入新的数据
    json_handler.write_json(data={'index': 'hello'})

    #todo 追加数据
    json_handler.append_to_json(data={'new_key': 'new_value'})

    #todo 删除指定key的数据
    json_handler.delete_from_json(key='index')

    #todo 更新指定key的数据
    json_handler.update_json(key='new_key', new_value='updated_value')

说明:

其实json文件是可以与之前说过的yaml文件来结合使用的:

JSON 通常用于数据交换,而 YAML 更具可读性,适合配置文件等用途。如果需要在同一个项目中同时使用 JSON 和 YAML 文件,可能是由于不同场景的需求,或者需要将它们结合起来做一些特定的处理。 这个我们后面会出一篇文章来稍微讲解一下

相关推荐

win11怎么激活(win11怎么激活office)

目前,Windows11的永久激活方法还没有被公开或者确认。不过,你可以尝试以下几种方法来激活Windows11:使用数字许可证:如果你的电脑已经安装了Windows10并且已经激活,那么你可以...

笔记本电脑快捷键大全(笔记本电脑快捷键大全常用)
  • 笔记本电脑快捷键大全(笔记本电脑快捷键大全常用)
  • 笔记本电脑快捷键大全(笔记本电脑快捷键大全常用)
  • 笔记本电脑快捷键大全(笔记本电脑快捷键大全常用)
  • 笔记本电脑快捷键大全(笔记本电脑快捷键大全常用)
苹果恢复出厂设置(苹果恢复出厂设置还能恢复数据吗)

首先打开手机上面的“设置”功能,进入手机的系统设置。进入手机的设置后,选择“通用"。进入通用之后,往下滑动页面,在页面的最下方可以看到“还原”的选项,点击进入。进入还原之后,有多个还原选项,我...

路由器的配置步骤(路由器配置教学)

打开浏览器-输入192.168.1.1(一般路由器地址是这个或者查看路由器背面的登录信息)进路由-输入用户名,密码,(默认一般是admin)。2、在【设置向导】里,选择【PPOE拨号】(有些是ADS...

psp模拟器ios(psp模拟器ios推荐)

psp手机模拟器推荐PPSSPP,作为最流行的开源PSP模拟器,因为其强大的功能和兼容性广受玩家们喜爱。虽然提供了PC和安卓双平台的支持,但是有碍于安卓设备的硬件,移动端PPSSPP的功能并不完整。不...

台式机重装系统按f几(重装电脑系统按f几)

F8、F9、F10、F11、F12、F2、del。一般用到这几个。下面以联想电脑装WIN10系统为例:1、将制作好的U盘插入要重装系统的电脑,开机画面出现电脑品牌logo时,不停地按“f2键”进入“B...

win10激活错误代码0x8007007b

Win10激活出现0x8007007b解决方法如下1、找到计算机,右键点击属性,确认你的电脑系统是否是windows10。2、鼠标右击桌面,依次点击个性化-主题-桌面图标设置,勾选计算机后依次点击应用...

4000台式电脑最好的组装配置
4000台式电脑最好的组装配置

四千元价格组装电脑主机与五千元组装电脑主机的价格类似,因为电脑主机就几个大部件,电脑主机主板是多少代的产品?主板内存的插槽数?电脑处理器等如果是自己组装,都可以配置到十二代产品,电脑硬盘可以分为256G固态硬盘做系统盘,1T机械硬盘作为工作...

2025-11-06 20:05 liuian

linux是一种什么系统(linux属于什么系统)

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。其内核由林纳斯·本纳第克特·托瓦兹于1991年1...

手机管理大师免费版(手机管理大师极速版)

使用手机“文件管理”打开文件夹时提示访问受限,需要前往“文件”应用查看1.进入手机设置——安全——应用权限——权限/应用2.在手机桌面找到手机管家——权限隐私——应用权限——权限/应用?当然,相对于被...

电脑能开机但是进不去桌面怎么办

打开任务管理器按Ctrl+Shift+Esc打开任务管理器。文件中运行新任务点击文件,运行新任务。输入指令重启桌面输入explorer.exe,点击确定,等待桌面重启完成就可以了。电脑已经是我们生活中...

怎样解除自动关机模式(怎样解除自动开关机)

1、打开手机主界面,找到系统自带的“时钟”应用,点击打开它。2、点击进入时钟后,点击右下角的“计时器”。3、进入到计时器后,点击“在计时结束启用雷达”这个选项。4、然后在这里,下拉到最下面,勾选“停...

电脑最高配置是什么配置2025

一,2023最新主流电脑装机配置如下。二,处理器可以使用十二代的i512400或者i512490f,内存16gb双通道,显卡rtx3060,主板可以使用b660m或者h610m。三,如果十三代酷睿...

MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能

数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...

一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法

在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...