如何使用Lists实现数据持久化,重启程序后保留列表值?
解决列表数据持久化的几种实用方法
Hey there! 我来帮你搞定这个列表数据保存的问题——这绝对是新手开发时绕不开的一个小难题😉 下面给你推荐几种简单易上手的方案,根据你的数据类型和需求选就行:
1. JSON文件存储(最适合简单数据)
JSON是轻量级的文本格式,和Python的列表、字典完美适配,而且可读性强,就算你手动打开文件也能看懂内容。
代码示例:
import json # 保存列表到JSON文件 def save_list_to_json(my_list, file_path): with open(file_path, 'w', encoding='utf-8') as f: json.dump(my_list, f, indent=4) # indent参数让格式更美观 # 从JSON文件加载列表 def load_list_from_json(file_path): try: with open(file_path, 'r', encoding='utf-8') as f: return json.load(f) except FileNotFoundError: # 第一次运行文件不存在,返回空列表 return [] # 实际使用流程 tracker_list = load_list_from_json('tracker_data.json') # 添加新的追踪项 tracker_list.append("2024-05-20 完成用户追踪") # 保存更新后的列表 save_list_to_json(tracker_list, 'tracker_data.json')
2. Pickle序列化(适合复杂对象)
如果你的列表里存的不是简单的字符串/数字,而是自定义类的实例、复杂嵌套对象,Pickle就很合适——它能直接把Python对象序列化保存,加载时还原成原对象。
代码示例:
import pickle def save_list_to_pickle(my_list, file_path): with open(file_path, 'wb') as f: pickle.dump(my_list, f) def load_list_from_pickle(file_path): try: with open(file_path, 'rb') as f: return pickle.load(f) except FileNotFoundError: return [] # 示例:保存包含自定义对象的列表 class TrackerItem: def __init__(self, name, timestamp): self.name = name self.timestamp = timestamp tracker_list = load_list_from_pickle('tracker_data.pkl') tracker_list.append(TrackerItem("用户登录", "2024-05-20 14:30")) save_list_to_pickle(tracker_list, 'tracker_data.pkl')
⚠️ 注意:Pickle文件是二进制格式,不能直接阅读,而且只适合Python环境中使用,跨语言不兼容。
3. SQLite数据库(适合大数据量/需要查询)
如果你的追踪数据量越来越大,或者需要经常筛选、查询特定内容,用轻量级的SQLite数据库是更好的选择——不需要额外安装数据库服务,Python自带支持。
代码示例:
import sqlite3 # 初始化数据库表(第一次运行时创建) def init_tracker_db(): conn = sqlite3.connect('tracker.db') cursor = conn.cursor() # 创建存储追踪项的表 cursor.execute(''' CREATE TABLE IF NOT EXISTS tracker_items ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() conn.close() # 将列表保存到数据库 def save_list_to_db(my_list): conn = sqlite3.connect('tracker.db') cursor = conn.cursor() # 可选:如果需要覆盖旧数据,先清空表(根据你的业务需求调整) # cursor.execute('DELETE FROM tracker_items') for item in my_list: cursor.execute('INSERT INTO tracker_items (content) VALUES (?)', (item,)) conn.commit() conn.close() # 从数据库加载列表 def load_list_from_db(): conn = sqlite3.connect('tracker.db') cursor = conn.cursor() cursor.execute('SELECT content FROM tracker_items ORDER BY created_at DESC') # 将查询结果转换为列表 items = [row[0] for row in cursor.fetchall()] conn.close() return items # 使用流程 init_tracker_db() tracker_list = load_list_from_db() tracker_list.append("新增数据库存储的追踪项") save_list_to_db(tracker_list)
选择建议
- 数据简单(字符串、数字、基础字典/列表)→ JSON
- 有复杂Python对象需要保存 → Pickle
- 数据量大、需要查询/筛选功能 → SQLite
内容的提问来源于stack exchange,提问作者Benjamin Henry
相关产品推荐
相关产品推荐

