如何将文件中的数组字符串转换为3D数组?
问题:字符串转3D数组失败
我从文件里读了一段数组格式的字符串,想转成3D数组,但试了各种方法都不行。我用的代码如下:
with open(output_dir/f"{input_reg}.txt", "r", encoding='utf-8') as file1: Fa = file1.read() Fa = np.frombuffer(Fa, dtype=float) Fd = json.loads(Fa)
待转换的数组字符串示例:
[[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]][[[0.43096440627115085, -0.8577107283236622, -0.28036045913403573], [-0.4082482904638634, 0.09175170953613587, -0.9082482904638631], [0.8047378541243648, 0.5058793634016807, -0.31061721752604615]], [131.17115021913514, 164.44788458945936, -1692.8571428571427]]
问题原因
np.frombuffer用法错误:这个函数专门解析二进制字节流,不能直接处理文本字符串,用它处理读取到的内容会完全打乱数据格式。- 字符串格式不合法:原始字符串是多个独立的JSON数组直接拼接(比如
[[...]]后直接跟[[...]]),没有分隔符也没有外层数组包裹,不符合JSON规范,json.loads自然无法解析。
解决方法
先修复字符串格式,转成合法的JSON数组,再解析转换:
import json import numpy as np import re from pathlib import Path # 替换成你的实际路径和文件名 output_dir = Path("your_output_directory") input_reg = "your_file_name" with open(output_dir / f"{input_reg}.txt", "r", encoding='utf-8') as file1: raw_str = file1.read() # 给相邻数组之间添加逗号分隔符 fixed_str = re.sub(r']]\[\[', ']], [[', raw_str) # 给整体加上外层数组括号,变成合法JSON格式 fixed_str = f"[{fixed_str}]" # 解析为Python列表 data_list = json.loads(fixed_str) # 转换为3D numpy数组 final_array = np.array(data_list) # 查看数组形状,确认结构正确 print(final_array.shape)
这段代码会将原始字符串转换成形状为(8, 2, ...)的3D数组,每个元素包含一个3×3的子数组和一个3元素的子数组,和原始数据结构完全对应。
内容的提问来源于stack exchange,提问作者Aloma85
相关产品推荐
相关产品推荐

