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

如何用文本文件保存读取大型嵌套数组以实现Python程序间共享?

这问题我太熟了!要实现嵌套数组在两个Python程序之间完美传递,核心就是把数组序列化(转成可存储的文本/二进制格式)到文件,再在另一个程序里反序列化(还原成原数组)。下面给你讲几种最实用的方法,每种都附代码示例,你可以根据需求选:


方法1:用JSON(最通用,跨语言友好)

JSON是个跨语言的轻量级格式,只要你的嵌套数组里是Python基本类型(列表、字典、字符串、数字、布尔值、None),用它准没错,而且生成的文件是纯文本,可读性强。

保存数组的代码(程序A):

import json

# 假设这是你的大型嵌套数组
nested_array = [
    [1, 2, 3],
    ["a", "b", ["x", "y", None]],
    [True, False, {"key": "value"}]
]

# 写入文件,ensure_ascii=False支持中文等非ASCII字符,indent让格式更易读
with open("array_data.json", "w", encoding="utf-8") as f:
    json.dump(nested_array, f, ensure_ascii=False, indent=4)

读取数组的代码(程序B):

import json

with open("array_data.json", "r", encoding="utf-8") as f:
    loaded_array = json.load(f)

# 验证是否和原数组完全一致
print(loaded_array == nested_array)  # 输出True

⚠️ 注意:JSON不支持Python特有的对象(比如datetime、自定义类实例、set),如果你的数组里有这些,得先转成JSON支持的类型,或者换别的方法。


方法2:用Pickle(Python专属,支持所有Python对象)

如果你的嵌套数组里有Python独有的对象,或者想原汁原味保留所有信息,Pickle是最佳选择——它能序列化几乎所有Python对象,而且体积小、速度快。

保存数组的代码(程序A):

import pickle

# 示例:数组里包含自定义类实例
class MyClass:
    def __init__(self, value):
        self.value = value

nested_array = [
    [1, 2, 3],
    ["a", "b", ["x", "y", None]],
    [MyClass(100), MyClass(200)]
]

# 注意用二进制模式写入
with open("array_data.pkl", "wb") as f:
    pickle.dump(nested_array, f)

读取数组的代码(程序B):

import pickle

# 要确保两个程序里的自定义类定义完全一致
class MyClass:
    def __init__(self, value):
        self.value = value

with open("array_data.pkl", "rb") as f:
    loaded_array = pickle.load(f)

# 验证一致性
print(loaded_array[2][0].value == nested_array[2][0].value)  # 输出True

⚠️ 重要提醒:Pickle是不安全的!绝对不要读取来源不明的Pickle文件,因为它在反序列化时会执行文件里的代码,可能被黑客利用。


方法3:用NumPy(适合数值型嵌套数组)

如果你的嵌套数组是纯数值类型(比如全是整数、浮点数),而且数据量很大,用NumPy的二进制格式会比JSON/Pickle高效得多,读写速度快,占用空间小。

保存数组的代码(程序A):

import numpy as np

# 把Python列表转成NumPy数组
nested_array = np.array([
    [1, 2, 3],
    [4.5, 5.6, 6.7],
    [7, 8, 9]
])

# 保存成.npy文件(单个数组)
np.save("array_data.npy", nested_array)

# 如果要存多个数组,用npz格式:
# np.savez("array_data.npz", arr1=nested_array, arr2=another_array)

读取数组的代码(程序B):

import numpy as np

# 读取.npy文件
loaded_array = np.load("array_data.npy")

# 转成Python列表(如果需要的话)
loaded_list = loaded_array.tolist()

# 验证一致性
print(np.array_equal(loaded_array, nested_array))  # 输出True

方法4:用repr + eval(简单但不安全,不推荐)

如果你图省事,也可以把数组转成字符串(用repr()),然后写入文件,读取时用eval()还原。但这种方法风险极高——如果文件被篡改,eval()会执行恶意代码,所以只适合本地测试,绝对不要用于生产环境。

示例代码(不推荐):

# 保存
nested_array = [[1,2,3], ["a","b"]]
with open("array_data.txt", "w") as f:
    f.write(repr(nested_array))

# 读取
with open("array_data.txt", "r") as f:
    loaded_array = eval(f.read())

总结怎么选:

  • 要跨语言、可读性强、安全:选JSON
  • Python专属、有复杂对象:选Pickle(注意仅读取可信文件)
  • 数值型大数据量:选NumPy
  • 绝对别用eval除非你完全信任文件来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:07:15