使用Numpy genfromtxt()读取txt数据时如何跳过无效行
Numpy genfromtxt跳过无效格式行实现方案
方案1:调整现有genfromtxt参数即可实现
你当前代码已经配置了invalid_raise=False参数,本身就具备跳过解析失败行的能力,只需要补充两个参数优化适配你的场景:
- 增加
usecols=range(13):你的正常行总共有13列(1个时间戳列+12个浮点数值列),强制指定读取列数后,列数不匹配的行将会被直接过滤 - 动态生成浮点列的dtype规则,避免手动写12个f8出现数量错误
修改后代码:
values = np.genfromtxt( fi, dtype="S32," + ",".join(["f8"]*12), delimiter="\t", missing_values='', invalid_raise=False, filling_values=0, usecols=range(13) )
方案2:自定义行过滤逻辑(适合复杂无效行场景)
如果你的无效行存在列数刚好匹配但内容不符合的特殊情况,可以先对文件行做自定义校验再传入genfromtxt,使用生成器实现不会额外占用内存,适合处理大数据量文件:
def filter_valid_lines(file_obj): for line in file_obj: # 可优先加关键词过滤,直接跳过含无效标识的行:if 'DUT stopped' in line: continue split_line = line.strip().split("\t") if len(split_line) != 13: continue try: [float(col) for col in split_line[1:]] yield line except ValueError: continue # 重置文件指针后传入过滤后的行 fi.seek(0) values = np.genfromtxt( filter_valid_lines(fi), dtype="S32," + ",".join(["f8"]*12), delimiter="\t", missing_values='', filling_values=0 )
内容的提问来源于stack exchange,提问作者CodingPicard
相关产品推荐
相关产品推荐

