读取指定目录TXT文件写入JSON遇类型错误,求技术解决方案
问题分析与解决方案
兄弟,你遇到的expected str, bytes or os.PathLike object, not list错误,根源很直接:glob.glob("path/*.txt")返回的是文件路径的列表,但你直接把这个列表传给了open()函数——而open()需要的是单个字符串路径,不是列表,自然就触发了类型错误。
另外你的代码还有几个小问题需要调整:比如每次循环都重置data = [],会导致只保留当前行的数据;多次用json.dump(data, outfile)追加写入,最后生成的JSON文件会是多个独立数组,不符合JSON格式规范。
下面是修正后的完整代码,我给你标清楚了关键改动:
import json import glob # 获取所有txt文件路径列表 filepaths = glob.glob("path/*.txt") # 初始化全局数据列表,用来存储所有文件的所有行数据 all_data = [] # 遍历每个文件路径 for filepath in filepaths: # 打开单个文件(这里filepath是字符串,符合open要求) with open(filepath, 'r') as fp: cnt = 1 line = fp.readline() while line: try: line_parts = line.strip().split(',') print(f"Object {cnt}: {line_parts}") # 把当前行的数据整理成字典,加入全局列表 all_data.append({ 'FileName': filepath, 'bbox_left': line_parts[0], 'bbox_top': line_parts[1], 'bbox_width': line_parts[2], 'bbox_height': line_parts[3], 'Score': line_parts[4], 'Object_category': line_parts[5], 'Truncation': line_parts[6], 'Occlusion': line_parts[7] }) except Exception as e: print(f"处理第{cnt}行出错: {e}") line = fp.readline() cnt += 1 # 所有文件处理完成后,一次性写入JSON文件(确保格式合法) with open('data.json', 'w') as outfile: json.dump(all_data, outfile, indent=4) # indent=4让JSON更易读
关键改动说明:
- 把
filepath改成filepaths,明确是列表;然后用for filepath in filepaths遍历每个单个文件路径,解决了类型错误的核心问题 - 初始化
all_data全局列表,避免每次循环重置数据,保证所有行的数据都能被保存 - 处理每行时用
line.strip()去掉换行符,避免分割后出现空字符串干扰数据解析 - 最后一次性写入所有数据到JSON文件,保证生成的是合法的JSON数组格式,避免多次追加导致的格式混乱
- 增加了错误提示的上下文,方便定位哪一行出了问题
这样修改后,既解决了类型错误,也优化了数据存储和JSON格式的合法性。
内容的提问来源于stack exchange,提问作者Nayeem Muddin Khan
相关产品推荐
相关产品推荐

