eval-leaderboard/merge.py
2025-07-18 07:26:26 +00:00

70 lines
2.4 KiB
Python

import os
import shutil
import json
import argparse
def do_merge(new_json_path, old_json_path):
with open(new_json_path, "r") as f:
new_json = json.load(f)
with open(old_json_path, "r") as f:
old_json = json.load(f)
if new_json.get("id") != old_json.get("id"):
raise RuntimeError(f"{new_json.get('id')} not equal to {old_json.get('id')} ")
# 基础属性,从新的里拿,不为空就覆盖。
base_params = [
"description",
"owner",
]
# 获取基础属性
for param in base_params:
if new_json.get(param):
old_json[param] = new_json.get(param)
# 更新result
new_results = new_json.get("results")
old_results = old_json.get("results")
for key in new_results:
if new_results[key]:
old_results[key] = new_results[key]
# 更新metadata
if new_json.get("metadata"):
old_json["metadata"] = new_json.get("metadata")
return old_json
def merge(new_data_path, old_data_path):
if not os.path.exists(new_data_path):
raise RuntimeError(f"data_path 【{new_data_path}】 not exist!")
# foreach new files
for new_json_file in os.listdir(new_data_path):
if not new_json_file.endswith("json"):
print(f"file {new_json_file} not a json file,jump")
continue
# check old file exist or not
if not os.path.exists(os.path.join(old_data_path, new_json_file)):
print(f"new file 【{new_json_file}】 copy...")
shutil.copyfile(os.path.join(new_data_path, new_json_file), os.path.join(old_data_path, new_json_file))
else:
print(f"merge file 【{new_json_file}")
new_json_content = do_merge(os.path.join(new_data_path, new_json_file),
os.path.join(old_data_path, new_json_file))
with open(os.path.join(old_data_path, new_json_file), "w") as f:
json.dump(new_json_content, f, indent=4, ensure_ascii=False)
if __name__ == '__main__':
args = argparse.ArgumentParser()
args.add_argument("--new_data", type=str, required=True)
args.add_argument('--old_data', type=str, default=None, required=False)
args = args.parse_args()
new_data: str = args.new_data
old_data: str = args.old_data or os.path.dirname(os.path.abspath(__file__))
merge(new_data, old_data)