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
相关产品推荐
相关产品推荐

