You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并含DataFrame的独立JSON文件并按disliked_vote规则重合并?

实现按disliked_vote拆分合并JSON格式DataFrame文件

核心思路

按文件名顺序遍历目标目录下的JSON文件,累积所有仅包含liked_vote=True的文件;当遇到包含disliked_vote=True的文件时,将累积的所有liked文件与当前disliked文件合并,统一把合并后所有行的liked_vote设为True、disliked_vote设为False,删除原文件后将结果保存为1.json;遍历结束后若还有未合并的liked文件,同样合并保存为1.json。

代码实现

import os
import pandas as pd

def merge_json_files(dir_path):
    # 获取目录下所有JSON文件,按文件名数字排序(保证1.json、2.json...的处理顺序)
    json_files = sorted(
        [f for f in os.listdir(dir_path) if f.endswith('.json')],
        key=lambda x: int(x.split('.')[0])
    )
    liked_file_paths = []  # 存储待合并的liked文件路径

    for file_name in json_files:
        file_path = os.path.join(dir_path, file_name)
        df = pd.read_json(file_path)
        
        # 检查当前文件是否存在disliked_vote=True的行
        has_disliked_entries = df['disliked_vote'].any()
        
        if not has_disliked_entries:
            # 无disliked内容,加入待合并列表
            liked_file_paths.append(file_path)
            continue
        
        # 遇到含disliked的文件,执行合并操作
        # 读取所有待合并的liked文件
        liked_dfs = [pd.read_json(fp) for fp in liked_file_paths]
        # 合并liked文件与当前disliked文件
        merged_df = pd.concat(liked_dfs + [df], ignore_index=True)
        
        # 统一设置投票标记
        merged_df['liked_vote'] = True
        merged_df['disliked_vote'] = False
        
        # 删除所有参与合并的原文件
        for fp in liked_file_paths + [file_path]:
            os.remove(fp)
        
        # 保存合并结果为1.json
        output_path = os.path.join(dir_path, '1.json')
        if os.path.exists(output_path):
            os.remove(output_path)
        merged_df.to_json(output_path, orient='records')
        
        # 清空待合并列表,继续处理后续文件
        liked_file_paths = []
    
    # 处理遍历结束后剩余的liked文件
    if liked_file_paths:
        liked_dfs = [pd.read_json(fp) for fp in liked_file_paths]
        merged_df = pd.concat(liked_dfs, ignore_index=True)
        output_path = os.path.join(dir_path, '1.json')
        if os.path.exists(output_path):
            os.remove(output_path)
        merged_df.to_json(output_path, orient='records')
        # 删除剩余的原文件
        for fp in liked_file_paths:
            os.remove(fp)

# 调用示例:替换为你的目标目录路径
merge_json_files('./dir')

关键说明

  1. 文件排序:通过提取文件名中的数字进行排序,确保处理顺序与文件命名顺序一致
  2. 内存优化:仅存储文件路径,合并时才读取DataFrame,避免大文件占用过多内存
  3. 数据安全:建议在运行代码前备份原始文件,防止误删或数据丢失
  4. 格式适配:如果你的JSON文件不是records格式(比如是split或index),需要调整pd.read_json和pd.to_json的orient参数

内容的提问来源于stack exchange,提问作者skidjoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:16:01