将TXT表格数据转换为Python字典时set不可下标报错如何解决
问题解决方法
错误根因
你初始化fileInfo的写法生成的是Python集合(set)而非字典:
# 这行代码生成的是集合,不是字典 fileInfo = {"Document", "Description", "Lng"}
集合没有键值对结构,不支持下标访问(也就是fileInfo["Document"]这种写法),所以会抛出TypeError: 'set' object is not subscriptable错误。
修复步骤
1. 修正字典初始化
你需要将每个键的初始值设为空列表,才能后续往里面追加数据:
fileInfo = {"Document": [], "Description": [], "Lng": []}
2. 优化处理逻辑(可选,无需生成临时清理文件)
你可以直接在读取原文件的过程中过滤有效行、解析数据,不需要额外生成CLEANED.txt文件,完整示例代码如下:
fileInfo = {"Document": [], "Description": [], "Lng": []} with open("你的文件路径.txt", 'r', encoding='utf-8') as fp: lines = fp.readlines() # 遍历所有行,只处理包含|符号的有效数据行 for line in lines: line = line.strip() # 表格行的特征是首尾都是| if line.startswith("|") and line.endswith("|"): # 拆分后去掉首尾空元素,每个字段清理前后空格 parts = [p.strip() for p in line.split("|") if p.strip()] # 跳过表头行 if parts[0] == "Document": continue # 往对应列表追加数据 if len(parts) == 3: fileInfo["Document"].append(parts[0]) fileInfo["Description"].append(parts[1]) fileInfo["Lng"].append(parts[2]) print(fileInfo)
运行后输出的结构和你预期一致:
{ "Document": ["VLX82304", "VLX82340", "VLX98234"], "Description": ["Unit 523435", "Self 339304", "Can 522018"], "Lng": ["EN", "EN", "EN"] }
3. 保留原清理文件逻辑的修复方案
如果你不想修改原有流程,只需要把初始化fileInfo的代码改成上述字典结构即可,后续的append操作就能正常运行。
内容的提问来源于stack exchange,提问作者MontX
相关产品推荐
相关产品推荐

