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

使用pickle.dump保存对象数组转为二进制,如何保存原格式?

解决方案

pickle是Python专用的二进制序列化工具,生成的文件本来就是不可读的二进制格式,不符合你需要的可读文本要求。好在你的Rule类已经实现了__repr__方法,它返回的字符串正好是你想要的格式,我们可以直接利用这个方法来生成目标文本。

方法1:保存为Rule对象列表元素形式

修改你的保存函数,直接将每个Rule对象转为字符串后写入文件:

def saveResponseInFile(rulesList):
    with open("Rules.txt", "w", encoding="utf-8") as file:
        # 用逗号+换行分隔每个Rule的字符串表示
        file.write(",\n".join(repr(rule) for rule in rulesList))

生成的文件内容会和你期望的第一种格式一致:

Rule(F1, HTTPS TCP, ['currentIP', 'ip'], ['www.google.ca', '8.8.8.8'], 443),
Rule(F4, HTTPS TCP, ['172.22.126.39', '172.23.94.9'], ['https://stackoverflow.com'], 443)

方法2:保存为带变量名的完整列表形式

如果需要生成包含myArray = [...]的格式,修改保存函数如下:

def saveResponseInFile(rulesList):
    with open("Rules.txt", "w", encoding="utf-8") as file:
        file.write("myArray = [\n")
        # 每个Rule占一行,用逗号分隔
        file.write(",\n".join(repr(rule) for rule in rulesList))
        file.write("\n]")

生成的文件内容会和你期望的第二种格式一致。

另一个脚本读取文件的方式

如果用方法2生成文件,另一个脚本可以通过exec直接加载内容(注意:仅当文件来源可信时使用,避免安全风险):

# 另一个脚本中的读取代码
with open("Rules.txt", encoding="utf-8") as file:
    content = file.read()
    exec(content)
    # 此时myArray变量已被定义,直接使用即可
    print(myArray)

如果用方法1生成文件,可以读取后手动解析成列表:

# 另一个脚本中的读取代码
from your_module import Rule  # 导入Rule类

rules = []
with open("Rules.txt", encoding="utf-8") as file:
    lines = file.read().split(",\n")
    for line in lines:
        if line.strip():
            # 用eval将字符串转为Rule对象,同样需确保文件可信
            rule = eval(line.strip())
            rules.append(rule)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:31:20