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

Python中如何修改运行时列表并保存以供后续运行复用?

实现Python脚本运行结果的持久化累加

现有如下Python代码:

numbers = []

for n in range(1,10):
  numbers.append(n)

print(numbers)

运行后输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

需求是修改代码,让本次运行的输出作为下次运行时numbers的初始值,这样第二次运行脚本就能输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案:通过外部文件持久化状态

脚本每次运行都是独立进程,内存数据会在运行结束后销毁,因此需要借助外部存储(比如文件)保存运行结果。以下是两种实用实现方式:

方式一:文本文件存储(可读可编辑)

import ast

# 读取上次保存的列表,文件不存在则初始化为空
try:
    with open('numbers_cache.txt', 'r', encoding='utf-8') as f:
        numbers = ast.literal_eval(f.read())
except FileNotFoundError:
    numbers = []

# 追加新的1-9序列
numbers.extend(range(1, 10))

# 将当前列表写入文件,供下次运行使用
with open('numbers_cache.txt', 'w', encoding='utf-8') as f:
    f.write(str(numbers))

# 打印最终结果
print(numbers)
  • 说明:用ast.literal_eval安全地将文件中的字符串转换为Python列表(比eval更安全,避免恶意代码执行);第一次运行时文件不存在,numbers初始化为空,添加1-9后写入文件;第二次运行读取到第一次的列表,再追加1-9即可得到目标结果。

方式二:pickle序列化(适合复杂对象)

如果后续需要保存更复杂的Python对象,pickle序列化会更便捷:

import pickle

# 读取缓存的对象
try:
    with open('numbers_cache.pkl', 'rb') as f:
        numbers = pickle.load(f)
except FileNotFoundError:
    numbers = []

# 追加新序列
numbers.extend(range(1, 10))

# 序列化并保存当前列表
with open('numbers_cache.pkl', 'wb') as f:
    pickle.dump(numbers, f)

print(numbers)
  • 说明:pickle可直接将Python对象序列化为二进制数据存储,读取时直接还原为原对象,无需手动类型转换;缺点是缓存文件为二进制格式,无法直接用文本编辑器查看或修改。

注意事项

  • 每次运行脚本都会自动累加序列,若需重置状态,直接删除对应的缓存文件(numbers_cache.txt或numbers_cache.pkl)即可。
  • 若多进程同时运行该脚本,需添加文件锁机制避免读写冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:35:26