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

Python读取文本文件中多个数组报错,需解决以获取预期输出

解决读取Test.txt中numpy数组字符串的语法错误问题

问题背景

尝试读取Test.txt中存储的多个numpy数组字符串,原代码运行时触发语法错误,无法获取预期输出。

原代码

import re
import numpy as np
import ast

with open('Test.txt') as f:
    s = f.readlines()
    #print(s)
    s = ' '.join(s)
    s = re.findall("\((\[[\w\W]*\])\)",s)
    s=ast.literal_eval(s[0])
    s=np.array(s)
    print([s])

Test.txt内容

[array([[1.7],
       [2.8],
       [3.9],
       [5.2]])]
[array([[2.1],
       [8.7],
       [6.9],
       [4.9]])]

报错信息

line 4
    [5.2]])]
          ^
SyntaxError: unmatched ')'

错误原因

  1. 正则表达式"\((\[[\w\W]*\])\)"采用贪婪匹配,会将整个文件内容作为单个匹配项,导致括号结构不匹配,触发语法错误。
  2. ast.literal_eval仅能解析原生Python字面量,无法识别numpy的array()语法,后续也无法正确解析数组内容。

解决方案

方案一:使用eval解析(适用于可信文件)

直接利用eval解析每个完整的数组块,同时传入numpy的array函数作为上下文,确保能识别数组语法:

import numpy as np

with open('Test.txt') as f:
    # 读取所有非空行
    lines = [line.strip() for line in f if line.strip()]
    array_blocks = []
    current_block = []
    # 合并每个完整的数组块
    for line in lines:
        current_block.append(line)
        # 判断当前块是否结束
        if line.endswith('])]'):
            array_blocks.append(' '.join(current_block))
            current_block = []
    # 解析每个数组块
    result = []
    for block in array_blocks:
        # 传入array=np.array作为上下文,让eval识别array函数
        arr = eval(block, {'array': np.array})
        result.append(arr)
    # 输出预期格式的结果
    for item in result:
        print(item)

方案二:提取数值重构数组(无安全风险)

通过正则提取数组中的数值部分,再重新构建numpy数组,避免eval带来的安全隐患:

import re
import numpy as np

with open('Test.txt') as f:
    content = f.read()
    # 匹配每个数组内的二维数值列表
    num_matches = re.findall(r'\[\[.*?\]\]', content, re.DOTALL)
    result = []
    for match in num_matches:
        # 将字符串转为列表后构建numpy数组
        num_list = eval(match)
        np_arr = np.array(num_list)
        # 包装成原格式的列表结构
        result.append([np_arr])
    # 输出结果
    for item in result:
        print(item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:05:21