python对json格式原文件追加内容(原文件可以不存在)

在实现上传人脸图片,并将该图片进行编码存入字典中时,由于信息都是临时存取,关了后台之后字典的信息全被清空。所以想将该字典内容存入json中 。在网上查阅资料发现好多都是将字典dict转化为json进行存储,于是我犯了个错误,每次将字典{"1":""}{"1":"","2":""}{"1":"","2":"","3":""}存进json,不仅造成存储内容重复,而且json格式错误,报错。

所以明确了一下需求,只需要将每次新加入的键值对存进json文件中,即在原有json文件中追加内容。

参考原博文:python对json格式原文件追加内容_一转眼再次遇到你-CSDN博客_python追加json

下面把原博文贴出来:

import json

with open('test2.json','a+',encoding="utf-8") as f:
    f.seek(0)  # 因为是追加方式打开,默认偏移量再最后面,我们调整到开头
    if f.read() =='':  # 判断是否为空,如果为空的话创建一个新的字典格式
        print('执行了吗')
        data = {}
    else:
        f.seek(0)
        data = json.load(f)
    print(data)

    data['a']="我爸是赵四"
    data['b']="我爸是李刚"  # 可以在第二遍运行时修改一下看看效果
    data['e']="我爸是李刚"
    data['f'] = {'a':'嵌套啊'}
    print(data)

    f.seek(0)# 设置文件当前位置 0代表开始处 其实有两个参数 offset,whence (whence常用有三个参数0,1,2;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。)
    # 如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。
    f.truncate() # 从开头截断,截断文件为size个字符,无参代表 从当前位置截断,截断之后后面的所有字符都被删除
    json.dump(data,f,indent=2,ensure_ascii=False)

第一次运行:
在这里插入图片描述
修改后第二次运行:添加内容
在这里插入图片描述

以上是原作者博文。

参考代码进行了修改:

# 将新加入图片生成的编码信息和姓名存入json中-----------
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + ' 将编码信息和姓名存入json')
    with open('faceCode.json', 'a+', encoding="utf-8") as f:
        f.seek(0)  # 因为是追加方式打开,默认偏移量在最后面,我们调整到开头
        if f.read() == '':  # 判断是否为空,如果为空的话创建一个新的字典格式
            print('执行了吗')
            data = {} #定义一个字典,临时存储人脸编码
        else:
            f.seek(0)
            data = json.load(f)
        print(data)

        data[name] =face_encodings[0].tolist() #json不认识numpy的array,所以转为list
        print(data)

        f.seek(0)  # 设置文件当前位置 0代表开始处 其实有两个参数 offset,whence (whence常用有三个参数0,1,2;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。)
        # 如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。
        f.truncate()  # 从开头截断,截断文件为size个字符,无参代表 从当前位置截断,截断之后后面的所有字符都被删除
        #json.dump把字典转换成json字符串并存储在文件中
        json.dump(data, f, indent=2, ensure_ascii=False) #,ensure_ascii=False为不确保ascii,及不将中文等特殊字符转为\uXXX等
        #indent为多行缩进空格数,不写则为一行
        f.close()

解析json:

    with open("faceCode.json", encoding="utf-8") as f:
        face_ecoding_lib = json.load(f)
        f.close()
    print(face_ecoding_lib)

(记得open完最好close一下,原先我老是不close)

附json学习链接:Python json读写方式和字典相互转化_Simple的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值