python循环多json文件并按要求写入不同json文件中

场景:当前有17个被分割的json文件,现在需要将这17个文件全部按要求并入训练集和测试集文件中,条件为:如将遍历到的前20000条数据加载进训练集,其余的并入测试集
1、遍历每个文件,并append到一个 list 中

# 导入json包
import json

# 新建一个list用于接收每个文件的list
all_data_list = []

# 共17个文件,依次为data1-data17
# 创建循环
for num in range(1, 18):
    # 实现路径的拼接
    file = 'result_data/data' + str(num) +'.json'
    try:
        json_data = json.load(open(file, "r", encoding="utf-8"))
        all_data_list.append(json_data)
    except:
        print("失败")
# 打印数据
# print(all_data_list)

2、再上述代码基础上,计算全部数据中的每个label数量

# 新list接收整个合并的list
new_all_data_list = []

# 统计数量
count0 = 0
count1 = 0
count2 = 0

for count in all_data_list:
    for new_count in count:
        # print(new_cpunt)
        new_all_data_list.append(new_count)
        # 计算每个标签的数量
        if new_count['label'] == '0':
            count0 +=1
        elif new_count['label'] == '1':
            count1 +=1
        elif new_count['label'] == '2':
            count2 +=1

# 为写入正确数据做准备
new_all_data_list = json.dumps(new_all_data_list, ensure_ascii=False)

# print(type(new_all_data_list))

3、计算出来的记过

# 写入不用文件中,进行训练集7,测试集3的比例进行
'''
105849          0    7成数据为  74100
94824           1    7成数据为  66400
321             2
'''

4、根据规则写入

new_json_data = json.loads(new_all_data_list)
# print(type(new_json_data))

# 分数据存储,使用两类数据
zhaobiao_count = 0
zhongbiao_count = 0
# 转储列表

all_zhaobiao_train_list0 = []       # 标签为0,且数量小于74100时append进训练集
all_zhaobiao_test_list0 = []        # 标签为0,且数量大于74100时append进测试集

all_zhongbiao_train_list1 = []      # 标签为1,且数量小于66400时append进训练集
all_zhongbiao_test_list1 = []       # 标签为1,且数量大于66400时append进测试集

for index, count in enumerate(new_json_data):
    # print(count)
    if count['label'] == '0':
        zhaobiao_count += 1
        # 当 zhaobiao_count < 74100 时写入
        if zhaobiao_count < 74100:
            with open("all_result_data/train.json", "a", encoding="utf-8") as f:
                last_new_count = json.dumps(new_json_data[index], ensure_ascii=False)
                f.write(last_new_count)
                f.close()
        else:
            with open("all_result_data/test.json", "a", encoding="utf-8") as f:
                last_new_count = json.dumps(new_json_data[index], ensure_ascii=False)
                f.write(last_new_count)
                f.close()
    else:
        zhongbiao_count += 1
        # 当 zhongbiao_count < 66400 时写入
        if zhongbiao_count < 66400:
            with open("all_result_data/train.json", "a", encoding="utf-8") as f:
                last_new_count = json.dumps(new_json_data[index], ensure_ascii=False)
                f.write(last_new_count)
                f.close()
        else:
            with open("all_result_data/test.json", "a", encoding="utf-8") as f:
                last_new_count = json.dumps(new_json_data[index], ensure_ascii=False)
                f.write(last_new_count)
                f.close()

5、需要注意的地方,一般写入操作是将open()中的模式改为’w’,但是循环写入会导致最终文件中只留下最后一条数据,因为’w’在每次写入时,会清空文件中的内容,故将’w’更改为’a’,即在不清空的基础上,新增内容。
6、但是好像最后需要手动添加符号更改格式,因为加入的是纯 dict 数据,需要手动添加 ‘[]’ 和 ‘,’ 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值