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

如何从文本文件提取数字数组并转换为Numpy数组?

问题:从混合文本中提取指定格式的NumPy数组

我有一个文本文件,内容如下:text a bla bla 1 2 3 4 5 6 text b bla 7 8 9 10 11 12 text c bla bla bla 13 14 15 16 17 18
我希望仅提取其中的数字数组并转换为目标NumPy数组:array([[ 1, 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11, 12], [ 13, 14, 15, 16, 17, 18]])
我尝试使用np.genfromtxt('test.txt',usecols=[0,1,2],invalid_raise=False),得到结果为array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.], [ 10., 11., 12.], [ nan, nan, nan], [ 13., 14., 15.], [ 16., 17., 18.]]),该结果不符合预期,请问如何解决?


解决方案

你的问题核心在于np.genfromtxt并不适合处理这种数字被非文本分散成多组的场景——它默认按空白分割所有元素,遇到非数字会生成NaN,而且没法识别你想要的"每6个数字一组"的逻辑。咱们换个更直接的思路:先把所有数字捞出来,再重新塑形。

步骤1:提取所有数字

先读取整个文件的内容,用正则表达式匹配出所有数字,转成整数列表:

import numpy as np
import re

# 读取文件内容
with open('test.txt', 'r') as f:
    content = f.read()

# 匹配所有数字字符串,转成整数
all_numbers = list(map(int, re.findall(r'\d+', content)))

步骤2:重塑为目标数组

现在all_numbers是一个包含18个元素的一维列表,直接用reshape把它转换成3行6列的数组即可:

target_array = np.array(all_numbers).reshape(3, 6)
print(target_array)

运行后你会得到完全符合预期的输出:

array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18]])

补充:如果分组规则更灵活怎么办?

如果未来你的分组不是固定的3行6列,而是每个text x后面跟着一组6个数字,那可以稍微调整逻辑,按text分割文本后再提取每组的数字:

with open('test.txt', 'r') as f:
    content = f.read()

# 按text分割,跳过第一个空元素
groups = content.split('text')[1:]
num_groups = []
for group in groups:
    # 提取每组的数字
    nums = list(map(int, re.findall(r'\d+', group)))
    num_groups.append(nums)

target_array = np.array(num_groups)

这样哪怕文本里的text分组数量变化,代码也能自动适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:50