json_Merge.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # -*- coding: utf-8 -*-
  2. # @File : json_merge.py
  3. # @Author : zhaoHL
  4. # @Contact : huilin16@qq.com
  5. # @Time Create First: 2021/8/1 10:25
  6. # @Contributor : zhaoHL
  7. # @Time Modify Last : 2021/8/1 10:25
  8. '''
  9. @File Description:
  10. # 合并json文件,可以通过merge_keys控制合并的字段, 默认合并'images', 'annotations'字段
  11. python ./coco_tools/json_Merge.py \
  12. --json1_path=./annotations/instances_train2017.json \
  13. --json2_path=./annotations/instances_val2017.json \
  14. --save_path=./instances_trainval2017.json
  15. '''
  16. import json
  17. import argparse
  18. def js_merge(js1_path, js2_path, js_merge_path, merge_keys):
  19. print('Merge'.center(100, '-'))
  20. print()
  21. print('json read...\n')
  22. with open(js1_path, 'r') as load_f:
  23. data1 = json.load(load_f)
  24. with open(js2_path, 'r') as load_f:
  25. data2 = json.load(load_f)
  26. print('json merge...')
  27. data = {}
  28. for k, v in data1.items():
  29. if k not in merge_keys:
  30. data[k] = v
  31. print(k)
  32. else:
  33. data[k] = data1[k] + data2[k]
  34. print(k, 'merge!')
  35. print()
  36. print('json save...\n')
  37. data_str = json.dumps(data, ensure_ascii=False)
  38. with open(js_merge_path, 'w', encoding='utf-8') as save_f:
  39. save_f.write(data_str)
  40. print('finish!')
  41. def get_args():
  42. parser = argparse.ArgumentParser(description='Json Merge')
  43. # parameters
  44. parser.add_argument('--json1_path', type=str,
  45. help='json path1 to merge')
  46. parser.add_argument('--json2_path', type=str,
  47. help='json path2 to merge')
  48. parser.add_argument('--save_path', type=str,
  49. help='json path to save the merge result')
  50. parser.add_argument('--merge_keys', type=list, default=['images', 'annotations'],
  51. help='json keys that need to merge')
  52. parser.add_argument('-Args_show', '--Args_show', type=bool, default=True,
  53. help='Args_show(default: True), if True, show args info')
  54. args = parser.parse_args()
  55. if args.Args_show:
  56. print('Args'.center(100, '-'))
  57. for k, v in vars(args).items():
  58. print('%s = %s' % (k, v))
  59. print()
  60. return args
  61. if __name__ == '__main__':
  62. args = get_args()
  63. js_merge(args.json1_path, args.json2_path, args.save_path, args.merge_keys)