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

如何跳过空JSON文件处理Guardian API数据,避免Pandas读取异常?

解决Guardian API JSON空文件处理与数据导出问题

我来帮你搞定这个问题——空JSON文件导致的Pandas报错确实很头疼,咱们一步步调整代码来解决:

首先先修正你代码里的小bug:原makePathToFile函数里的路径拼接逻辑有问题,而且没过滤非JSON文件,容易读到无关内容。然后我们重点处理空文件的判断和有效数据的提取。

完整修改后的代码

import pandas as pd
import os

def makePathToFile(path):
    pathtoJson = []
    # 遍历目录下所有文件,只保留JSON格式的
    for root, _, filenames in os.walk(path):
        for filename in filenames:
            if filename.lower().endswith('.json'):
                # 用root拼接正确的文件路径,避免子目录文件路径错误
                pathtoJson.append(os.path.join(root, filename))
    return pathtoJson

def readJsonAndWriteCSV(pathToJson, output_csv='guardian_articles.csv', desired_keys=['webTitle', 'webUrl', 'sectionName', 'publicationDate']):
    all_valid_data = []
    
    for json_file in pathToJson:
        # 先判断文件是否为空数组(内容仅为[])
        with open(json_file, 'r', encoding='utf-8') as f:
            content = f.read().strip()
            if content == '[]':
                print(f"跳过空文件: {json_file}")
                continue
        
        # 读取JSON并处理可能的异常
        try:
            df = pd.read_json(json_file)
            # 检查所需字段是否都存在
            missing_keys = [key for key in desired_keys if key not in df.columns]
            if missing_keys:
                print(f"跳过文件 {json_file}: 缺失字段 {missing_keys}")
                continue
            
            # 提取需要的列,加入总列表
            all_valid_data.append(df[desired_keys])
        except Exception as e:
            print(f"处理文件 {json_file} 出错: {str(e)}")
            continue
    
    # 合并所有有效数据并导出CSV
    if all_valid_data:
        final_df = pd.concat(all_valid_data, ignore_index=True)
        final_df.to_csv(output_csv, index=False, encoding='utf-8')
        print(f"成功导出 {len(final_df)} 条新闻到 {output_csv}")
    else:
        print("未找到有效新闻数据")

# 调用示例(替换成你的JSON文件夹路径)
json_file_paths = makePathToFile('/path/to/your/json/folder')
readJsonAndWriteCSV(json_file_paths)

关键改进点说明

  1. 空文件判断:先读取文件内容直接判断是否为[],比先读成DataFrame再判断更高效,还能避免空DataFrame访问字段的报错。
  2. 路径修复:用os.walk返回的root拼接文件路径,确保子目录里的文件也能被正确找到;同时过滤只处理.json后缀的文件。
  3. 健壮性提升:加入try-except捕获JSON格式错误等异常,避免单个坏文件导致整个脚本崩溃;还能检查所需字段是否存在,避免提取字段时出错。
  4. 批量处理:收集所有有效数据后再一次性导出CSV,比逐个追加写入更高效。

你可以根据自己的需求调整desired_keys列表,把需要的字段(比如webTitle、webUrl、publicationDate等)都加进去,最终导出的CSV就会包含这些列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:54