Python用pgm_reader读PGM文件报解包值不足错误解决方法
错误产生原因
- Pandas对象使用逻辑错误:
pd.Series的add()是算术运算方法,作用是对两个Series做逐元素加法,不是用来追加元素的接口。你直接将读取到的图像数组传入add()方法时,方法内部会尝试对传入值做索引-值结构解包,预期拿到2个值但实际只拿到1个,就触发了你看到的报错。另外你的代码漏写了import pandas as pd导入语句,本身也会触发pd未定义的名称错误。 - 文件遍历逻辑不严谨:
os.listdir()会返回目标路径下的所有条目,包括系统隐藏文件、子文件夹、非PGM格式的其他文件,这类文件不符合PGM的文件头格式规范,传入read_pgm()方法解析时同样会触发解包错误。 - 路径拼接方式兼容性差:直接用字符串拼接路径在Windows系统下会出现斜杠不匹配的问题,容易触发文件找不到的报错。
修正方案
不要在循环中动态修改Pandas对象(效率极低且容易触发接口误用问题),先用普通Python列表收集所有读取到的图像数据,遍历过程中过滤无效文件,全部读取完成后一次性转为pd.Series即可。修正后的完整代码如下:
from pgm_reader import Reader import os import pandas as pd reader = Reader() face_list = [] # 遍历Faces目录下的所有条目 for entry in os.listdir('Faces/'): file_path = os.path.join('Faces/', entry) # 跳过子文件夹、非pgm格式的文件 if not os.path.isfile(file_path) or not entry.lower().endswith('.pgm'): continue # 读取pgm图像并存入列表 img_data = reader.read_pgm(file_path) face_list.append(img_data) # 批量转为Series对象 Faces = pd.Series(face_list) Faces
内容的提问来源于stack exchange,提问作者Ali Mirash
相关产品推荐
相关产品推荐

