运行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")
关键说明
- 原脚本中
slash_rows = data.iloc[i, 0].split('/')是针对含斜杠的视频路径设计的,你的类ID文件中无斜杠,会直接触发索引越界错误,这也是on_bad_lines='skip'无效的核心原因。 - 两种方法都处理了文件中行首/行尾的空白字符,以及空行问题,适配你提供的类ID文件格式。
内容的提问来源于stack exchange,提问作者amy
相关产品推荐
相关产品推荐

