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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:20:43