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

读取指定目录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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:50:43