场景:当前有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 数据,需要手动添加 ‘[]’ 和 ‘,’ 。