Python实现将字典内容写入json文件

目录
  • 1、无序字典
  • 2、有序字典
  • 3、一键多值字典
  • 4、写入json
    • 4.1 无缩进
    • 4.2 有缩进
  • 方法补充

Python中有序字典和无序字典,一键多值字典。

Python将字典内容写入json文件。

1、无序字典

目前了解三种,在Python中直接默认的是无序字典,这种不会按照你插入的顺序排序,即使你对字典排序后,返回的也是一个list变量,而不是字典,倘若你将这个list字典后,又会变回无序字典。

例子如下:

import operator

x = {"label": "haha", "data": 234, "score": 0.3}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
print x
print type(x)
print sorted_x
print type(sorted_x)
print dict(sorted_x)

2、有序字典

如果我们想保持字典按照我们插入的顺序有序怎么办?可以用OrderedDict来初始化字典。

例子如下:

from collections import OrderedDict

x = OrderedDict()

x["label"] = "haha"
x["data"] = 234
x["score"] = 0.3

print x
print type(x)

3、一键多值字典

如果我们想用一键多值字典怎么办,可以使用defaultdict,例子如下:

from collections import defaultdict

video = defaultdict(list)
video["label"].append("haha")
video["data"].append(234)
video["score"].append(0.3)
video["label"].append("xixi")
video["data"].append(123)
video["score"].append(0.7)

print video
print type(video)

4、写入json

字典内容写入json时,需要用json.dumps将字典转换为字符串,然后再写入。

json也支持格式,通过参数indent可以设置缩进,如果不设置的话,则保存下来会是一行。

例子:

4.1 无缩进

from collections import defaultdict, OrderedDict
import json

video = defaultdict(list)
video["label"].append("haha")
video["data"].append(234)
video["score"].append(0.3)
video["label"].append("xixi")
video["data"].append(123)
video["score"].append(0.7)

test_dict = {
    'version': "1.0",
    'results': video,
    'explain': {
        'used': True,
        'details': "this is for josn test",
  }
}

json_str = json.dumps(test_dict)
with open('test_data.json', 'w') as json_file:
    json_file.write(json_str)

4.2 有缩进

from collections import defaultdict, OrderedDict
import json

video = defaultdict(list)
video["label"].append("haha")
video["data"].append(234)
video["score"].append(0.3)
video["label"].append("xixi")
video["data"].append(123)
video["score"].append(0.7)

test_dict = {
    'version': "1.0",
    'results': video,
    'explain': {
        'used': True,
        'details': "this is for josn test",
  }
}

json_str = json.dumps(test_dict, indent=4)
with open('test_data.json', 'w') as json_file:
    json_file.write(json_str)

方法补充

下面是参考上文代码整理出的另一种实现方法,可以参考一下

"""
将整个数据集分为train和test,相应的也分别分配整个json文件
"""
import os
import random
import json

total_select_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan_select"
total_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan.json"
test_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\test\has_yiliuwu\yuedongguan_test"
test_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\test\has_yiliuwu\yuedongguan_test\yuedongguan_test.json"
train_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan"
train_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan\yuedongguan.json"

data = json.load(open(total_json_path))["labels"]
# test_data = json.load(open(test_json_path))["labels"]
all_select_path = os.listdir(total_select_path)
all_file_path = []  # 待分配的图片路径
for item in all_select_path:
    file_path = os.path.join(total_select_path, item)
    all_file_path.append(file_path)
# print(all_file_path)

idx = [i for i in range(len(all_select_path))]
random.shuffle(idx)  # 在idx上改变

def copy_dir(src_path, target_path):  # src_path原文件,target_path目标文件
    if os.path.isdir(src_path) and os.path.isdir(target_path):
        filelist_src = os.listdir(src_path)
        for file in filelist_src:
            path = os.path.join(os.path.abspath(src_path), file)
            if os.path.isdir(path):
                path1 = os.path.join(os.path.abspath(target_path), file)
                if not os.path.exists(path1):
                    os.mkdir(path1)
                copy_dir(path, path1)
            else:
                with open(path, 'rb') as read_stream:
                    contents = read_stream.read()
                    path1 = os.path.join(target_path, file)
                    with open(path1, 'wb') as write_stream:
                        write_stream.write(contents)
        return True

    else:
        return False

test_data_dir = {"labels": []}
for item in idx[:41]:
    with open(all_file_path[item], 'rb') as read_stream:
        contents = read_stream.read()
        path1 = os.path.join(test_path, all_file_path[item].split("\\")[-1])  # 测试集图片的路径
        with open(path1, 'wb') as write_stream:
            write_stream.write(contents)
            for s in data:
                if s["filename"].split("\\")[-1] == all_file_path[item].split("\\")[-1]:
                    test_data_dir["labels"].append(s)
                # print(s)
json_test_str = json.dumps(test_data_dir, indent=4)
with open(test_json_path, 'w') as json_file:
    json_file.write(json_test_str)
print(test_data_dir)
print(len(test_data_dir["labels"]))
print("*"*30)

train_data_dir = {"labels": []}
for item in idx[41:]:
    with open(all_file_path[item], 'rb') as read_stream:
        contents = read_stream.read()
        path2 = os.path.join(train_path, all_file_path[item].split("\\")[-1])
        with open(path2, 'wb') as write_stream:
            write_stream.write(contents)
            for s1 in data:
                if s1["filename"].split("\\")[-1] == all_file_path[item].split("\\")[-1]:
                    train_data_dir["labels"].append(s1)
json_train_str = json.dumps(train_data_dir, indent=4)
with open(train_json_path, 'w') as json_file:
    json_file.write(json_train_str)
print(train_data_dir)
print(len(train_data_dir["labels"]))
# print(s)

以上就是Python实现将字典内容写入json文件的详细内容,更多关于Python字典写入json的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python json读写方式和字典相互转化

    在Python中,json指的是符合json语法格式的字符串,可以单行或者多行. 它可以方便的在使用在多种语言中,这里介绍的是在python中的字典(dict)与json字符串相互转化的方式. 1. 导入json包 import json 2. 初始化一个字典数据 dict_ = { 'name': 'Jack', 'age': 22, 'skills': ['Python', 'Java', 'C++', 'Matlab'], 'major': '计算机技术', 'english': '英语六

  • python 字典有序并写入json文件过程解析

    大致流程: 导包---import collections 新建一个有序字典---collections.OrderedDict() 写入json文件 代码: import collections real_result = collections.OrderedDict() real_result["target"] = "total_result" real_result["key1"] = "value1" real_r

  • python将字典内容写入json文件的实例代码

    python将字典内容写入json文件的方法:我们可以先使用json.dumps()函数将字典转换为字符串:然后再将内容写入json即可.json.dumps()函数负责对数据进行编码. 字典内容写入json时,需要用json.dumps将字典转换为字符串,然后再写入. json也支持格式,通过参数indent可以设置缩进,如果不设置的话,则保存下来会是一行. 举例: 无缩进: from collections import defaultdict, OrderedDict import jso

  • Python读取Json字典写入Excel表格的方法

    需求: 因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决问题. 环境: Windows7 +Python2.7 +Xlwt 具体分析: 原始文件为json列表,列表中有多个字典,生成Excel文件需要将列表中的字典的键值按键对应排列,也就是说,所有为"XX"的键对应的值写在一列,且每个字典中的不同键的键值保证在同一行. 解决思路是,读取json文件,然后遍历字典的键和值,读完第一个字典并写入Excel

  • python 如何将字典写为json文件

    目录 python 将字典写为json文件 字典结构如下 写为json Python txt文件读取写入字典(json.eval) 使用json转换方法 使用str转换方法 python 将字典写为json文件 字典结构如下 res = { "data":[] } temp = { "name":name, "cls":cls } res["data"].append(temp) 写为json 具体代码如下: json_dat

  • Python实现将字典内容写入json文件

    目录 1.无序字典 2.有序字典 3.一键多值字典 4.写入json 4.1 无缩进 4.2 有缩进 方法补充 Python中有序字典和无序字典,一键多值字典. Python将字典内容写入json文件. 1.无序字典 目前了解三种,在Python中直接默认的是无序字典,这种不会按照你插入的顺序排序,即使你对字典排序后,返回的也是一个list变量,而不是字典,倘若你将这个list字典后,又会变回无序字典. 例子如下: import operator x = {"label": "

  • python读文件保存到字典,修改字典并写入新文件的实例

    实例如下所示: tcode={} transcode={} def GetTcode(): #从文本中获取英文对应的故障码,并保存在tcode字典(故障码文本样例:oxff,0xff,0x00,0x01, "Fuel Volume Regulator Control Circuit High") with open('text_en.txt','r+')as fileone: for line in fileone.readlines(): if not line: continue

  • Python打开文件,将list、numpy数组内容写入txt文件中的方法

    python保存numpy数据: numpy.savetxt("result.txt", numpy_data); 保存list数据: file=open('data.txt','w') file.write(str(list_data)); file.close() 以上这篇Python打开文件,将list.numpy数组内容写入txt文件中的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python实现的读取/更改/写入xml文件操作示例

    本文实例讲述了Python实现的读取/更改/写入xml文件操作.分享给大家供大家参考,具体如下: 原始文档内容(test.xml): <?xml version="1.0" encoding="UTF-8"?> <framework> <processers> <processer name="AProcesser" file="lib64/A.so" path="/tmp&

  • Python加载带有注释的Json文件实例

    由于json文件不支持注释,所以如果在json文件中标记了注释,则使用python中的json.dump()无法加载该json文件. 本文旨在解决当定义"//"为json注释时,如何正确解析有注释的json文件. 程序实现 # encoding: utf-8 import json import re import sys reload(sys) sys.setdefaultencoding('utf8') CAUTION_PRINT_HEAD = 'caution: ' # 创建一个

  • Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

    先举个例子,分别以不指定编码.指定编码为 utf-8.指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一.不指定编码方式,直接存入 csv 文件 import csv with open('test.csv', 'w') as fp: writer = csv.writer(fp) writer.writerow(['汉语', '俄语', '韩语', '日语', '英语']) writer.writerow(['爱你', 'люблю тебя

  • Qt写入Json文件的方法详解(含源码+注释)

    目录 一.示例Json文件内容 二.Json写入会使用的类(介绍写入所使用的类在本文中的作用,个人理解) 三.Json文件的写入 3.1 常规类型的写入 3.2 对象及数组类型的添加 3.3 Json串写入文件 总结 一.示例Json文件内容 下方为本文所使用的Json文件的内容,其中包含字符串.数值.布尔.null.对象.数组等(写入方式在本文第三节) { "array": [ "str", 88, null ], "bool": true,

随机推荐