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

如何读取列间缺失空格的混乱文本数据?解决numpy.genfromtxt列数不匹配报错

解决方案

方法1:使用固定宽度读取(推荐)

你遇到的报错是因为这份数据本质是固定宽度格式,而非空格分隔格式:当第四列出现负数时,负号占用了原本两列之间的空格位置,导致按空格切分时少识别了一列。
numpy.genfromtxt 支持直接指定每列的宽度读取,不需要依赖空格分隔,你只需要根据你的数据对齐情况,给delimiter参数传入每列的宽度列表即可,适配你代码的修改如下:
首先根据你提供的样例,每列宽度可设置为[5, 6, 3, 7, 7, 6],你可以根据实际文件的对齐情况微调:

# 只需要修改genfromtxt那一行,增加delimiter参数
arr = np.genfromtxt('testing.dat', skip_header=skip, max_rows=incr, dtype=gro_dt, delimiter=[5, 6, 3, 7, 7, 6])

如果觉得手动数宽度麻烦,也可以用pandas的read_fwf接口自动识别固定宽度列,读取后转numpy数组即可:

import pandas as pd
df = pd.read_fwf('testing.dat', header=None)
arr = df.to_numpy(dtype=gro_dt)

方法2:预处理文本补空格

你也可以通过正则替换的方式,先把连在一起的第三列和第四列分开,在数字和紧跟的负号之间插入空格:

import re

# 读取文件时预处理所有行
with open('testing.dat', 'r') as f:
    raw_lines = f.readlines()
# 替换所有 数字+负号 的组合为 数字+空格+负号
processed_lines = [re.sub(r'(\d)(-)', r'\1 -', line) for line in raw_lines]

# 后续genfromtxt直接读处理后的行列表即可
arr = np.genfromtxt(processed_lines, skip_header=skip, max_rows=incr, dtype=gro_dt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:30:05