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

Python使用CSV存储链接与描述仅存最新数据的解决及优化咨询

问题解答

1. 实现全量历史数据存储的修改方法

你遇到的仅能保存最后一次输入的问题,核心原因是写入CSV文件时使用了w(覆盖写入)模式,该模式每次打开文件都会清空原有内容,仅保留本次写入的数据。
有两种常用修改方案:

方案1:追加写入模式

仅在第一次创建文件时写入表头,后续新增数据直接追加到文件末尾,无需读取全量历史数据,适合数据量较大的场景:

import csv
import os

def save_record(link: str, desc: str, file_path: str = "link_store.csv"):
    file_exist = os.path.isfile(file_path)
    # 用a模式追加写入,newline参数避免csv出现空行
    with open(file_path, "a", encoding="utf-8", newline="") as f:
        writer = csv.writer(f)
        # 文件不存在时先写入表头
        if not file_exist:
            writer.writerow(["链接", "描述"])
        # 追加新数据
        writer.writerow([link, desc])

方案2:内存全量缓存后写入

程序启动时先把所有历史数据读到内存列表,新增数据追加到列表,保存时直接覆盖写入全量数据,适合数据量小、需要在内存中操作全量数据的场景:

import csv

# 全局缓存列表,程序启动时调用load_data初始化
data_cache = []

def load_data(file_path: str = "link_store.csv"):
    global data_cache
    try:
        with open(file_path, "r", encoding="utf-8") as f:
            reader = csv.DictReader(f)
            data_cache = [row for row in reader]
    except FileNotFoundError:
        # 文件不存在时初始化空列表
        data_cache = []

def save_all_data(file_path: str = "link_store.csv"):
    with open(file_path, "w", encoding="utf-8", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["链接", "描述"])
        writer.writeheader()
        writer.writerows(data_cache)

新增数据时直接调用data_cache.append({"链接": 新链接, "描述": 新描述}),执行save指令时调用save_all_data即可。

2. 更适配场景的存储方案

根据使用场景可以选择不同的存储方案:

  • 个人自用小工具、数据量小于1万条:
    • 优先选JSON文件:直接用Python内置json模块序列化/反序列化整个数据列表,不用处理表头、特殊字符转义等问题,代码更简洁。
    • 可选SQLite:轻量文件型数据库,无需额外部署服务,支持SQL查询,后续如果需要加搜索、分类、筛选功能扩展成本极低。
  • 多用户使用、数据量大于10万条、需要高并发访问:
    • 可以选择MySQL、PostgreSQL等关系型数据库,或者MongoDB等文档数据库,支持更复杂的权限控制和查询需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:57:03