import os import json import argparse import sys from typing import Dict, List def merge_json_files(src_folder: str, dst_folder: str, output_folder: str): # 创建输出文件夹(如果不存在) os.makedirs(output_folder, exist_ok=True) # 遍历源文件夹中的所有文件 for filename in os.listdir(src_folder): if filename.endswith('.json'): src_file_path = os.path.join(src_folder, filename) dst_file_path = os.path.join(dst_folder, filename) # 检查目标文件夹中是否有对应的文件 if os.path.exists(dst_file_path): with open(src_file_path, 'r', encoding='utf-8') as src_file: src_data = json.load(src_file) with open(dst_file_path, 'r', encoding='utf-8') as dst_file: dst_data = json.load(dst_file) # 检查两个 JSON 数组的长度是否一致 if len(src_data) != len(dst_data): print(f"Error: The JSON files {filename} have different lengths.") sys.exit(1) # 合并 JSON 数据 merged_data = [] for index in range(len(src_data)): src_item = src_data[index] dst_item = dst_data[index] message_src = src_item.get('message', '') message_dst = dst_item.get('message', '') # 创建合并后的项,只保留存在的 name merged_item = {} if 'name' in src_item: merged_item['src_name'] = src_item['name'] if 'name' in dst_item: merged_item['dst_name'] = dst_item['name'] # 将 src 和 dst 消息直接添加到合并项中 merged_item['src'] = message_src merged_item['dst'] = message_dst merged_data.append(merged_item) # 输出合并的 JSON 文件 output_file_path = os.path.join(output_folder, filename) with open(output_file_path, 'w', encoding='utf-8') as output_file: json.dump(merged_data, output_file, ensure_ascii=False, indent=2) def main(): parser = argparse.ArgumentParser(description='Merge JSON files from two folders and output to another folder.') parser.add_argument('src_folder', type=str, help='The source folder containing JSON files.') parser.add_argument('dst_folder', type=str, help='The destination folder containing JSON files to merge with.') parser.add_argument('output_folder', type=str, help='The output folder where merged files will be saved.') args = parser.parse_args() merge_json_files(args.src_folder, args.dst_folder, args.output_folder) if __name__ == '__main__': main()