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

使用numpy.genfromtxt读取pdbqt文件时如何忽略列数异常行?

解决pdbqt转txt时np.genfromtxt列数不匹配的问题

问题背景

使用np.genfromtxt读取pdbqt文件时,因部分行列数不符合预期触发ValueError报错,需要跳过这些格式异常的行完成文件转换。

修正后的代码

from __future__ import division
import numpy as np
import glob

def pdbqt_to_txt(filename):
    # 读取指定列,忽略格式错误的行
    data = np.genfromtxt(
        filename,
        dtype=float,
        usecols=(6, 7, 8),
        skip_footer=1,
        invalid_raise=False  # 核心:遇到错误行不抛出异常,填充为NaN
    )
    # 过滤掉包含NaN的无效行
    valid_data = data[~np.isnan(data).any(axis=1)]
    # 生成输出文件名并保存
    output_name = filename.replace('.pdbqt', '.txt')
    np.savetxt(output_name, valid_data, fmt='%.6f')

# 获取所有pdbqt文件
all_files = glob.glob('*.pdbqt')
print(all_files)

# 批量处理
for file in all_files:
    pdbqt_to_txt(file)

关键调整说明

  • invalid_raise=False:关闭genfromtxt的错误抛出机制,遇到列数不匹配、无法转换为浮点型的行时,会将该行数据填充为NaN而非直接报错。
  • 过滤NaN行:通过~np.isnan(data).any(axis=1)筛选出所有无NaN的有效行,确保输出的txt文件只包含符合格式的数据。
  • 冗余代码清理:移除原脚本中重复的os导入和重复赋值的all_filenames,直接用glob获取目标文件更高效。
  • 补充输出逻辑:原脚本仅读取数据未保存,新增np.savetxt完成txt文件输出,可通过fmt参数调整输出精度。

额外提示

如果pdbqt文件开头存在注释类非数据行,可在genfromtxt中添加skip_header=N参数(N为需要跳过的行数),确保只读取有效数据段。

内容的提问来源于stack exchange,提问作者user3765252

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:57:33