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

运行ucf101_json.py转TXT到JSON时触发pandas.ParserError,求解决

解决pandas.errors.ParserError及脚本适配问题

问题根源

你当前使用的convert_csv_to_dict函数是为UCF101的视频标注文件(如trainlist01.txt,格式为视频路径/文件名.avi 类ID)设计的,而你传入的是类ID与类名的映射文件,两者格式完全不匹配,导致pandas解析报错,且on_bad_lines='skip'无法解决逻辑适配问题。

可行解决方案

直接重写适配当前类ID文件格式的转换函数,以下两种方式任选:

方法1:使用pandas处理

import pandas as pd
import json

def convert_classid_to_dict(txt_path):
    # 用正则匹配任意空白字符作为分隔符,跳过空行
    data = pd.read_csv(txt_path, delimiter=r'\s+', header=None, skip_blank_lines=True)
    # 构建类ID到类名的字典(类ID转为整数)
    return dict(zip(data.iloc[:, 0].astype(int), data.iloc[:, 1].str.strip()))

def save_as_json(txt_path, json_path):
    class_map = convert_classid_to_dict(txt_path)
    with open(json_path, 'w', encoding='utf-8') as f:
        json.dump(class_map, f, indent=2)

# 调用示例
save_as_json("你的classid文件路径.txt", "输出的json文件路径.json")

方法2:原生文件读取(更稳定,避免pandas解析问题)

import json

def convert_classid_to_dict(txt_path):
    class_map = {}
    with open(txt_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            # 仅分割一次,适配类名含空格的极端情况
            parts = line.split(maxsplit=1)
            if len(parts) != 2:
                continue
            class_id, class_name = parts
            class_map[int(class_id)] = class_name.strip()
    return class_map

def save_as_json(txt_path, json_path):
    class_map = convert_classid_to_dict(txt_path)
    with open(json_path, 'w', encoding='utf-8') as f:
        json.dump(class_map, f, indent=2)

# 调用示例
save_as_json("你的classid文件路径.txt", "输出的json文件路径.json")

关键说明

  1. 原脚本中slash_rows = data.iloc[i, 0].split('/')是针对含斜杠的视频路径设计的,你的类ID文件中无斜杠,会直接触发索引越界错误,这也是on_bad_lines='skip'无效的核心原因。
  2. 两种方法都处理了文件中行首/行尾的空白字符,以及空行问题,适配你提供的类ID文件格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:54:58