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

如何向已有CSV文件追加内容?附Rust代码示例及相关疑问

Rust CSV 追加写入实现方案

好问题!你当前的代码使用csv::Writer::from_path时,默认是以覆盖模式打开文件的,所以每次运行都会清空原有内容重新写入。要改成追加模式,我们需要借助std::fs::OpenOptions来手动指定文件的打开方式,再将其传递给CSV写入器。

修改步骤说明

  • 用OpenOptions配置文件打开规则:设置append(true)开启追加模式,同时设置create(true)确保文件不存在时自动创建
  • 需要额外判断文件是否已存在:如果是新创建的文件,需要写入表头;如果是已有文件,直接追加数据即可(避免重复写入表头)

修改后的完整代码

extern crate csv;
use std::error::Error;
use std::fs::OpenOptions;
use std::process;
use std::path::Path;

fn run() -> Result<(), Box<Error>> {
    let file_path = Path::new("test.csv");
    // 配置文件打开选项:追加模式 + 不存在则创建
    let file = OpenOptions::new()
        .append(true)
        .create(true)
        .open(file_path)?;
    
    let mut wtr = csv::Writer::from_writer(file);
    
    // 判断文件是否原本就存在:不存在则写入表头
    if !file_path.exists() {
        wtr.write_record(&["City", "State", "Population", "Latitude", "Longitude"])?;
    }
    
    // 追加写入数据记录
    wtr.write_record(&["Davidsons Landing", "AK", "", "65.2419444", "-165.2716667"])?;
    wtr.write_record(&["Kenai", "AK", "7610", "60.5544444", "-151.2583333"])?;
    wtr.write_record(&["Oakman", "AL", "", "33.7133333", "-87.3886111"])?;
    wtr.flush()?;
    
    Ok(())
}

fn main() {
    if let Err(err) = run() {
        println!("{}", err);
        process::exit(1);
    }
}

关于文件不存在时的有效性

完全有效!因为我们在OpenOptions中设置了create(true),当检测到test.csv不存在时,系统会自动创建这个文件,然后写入表头和数据,和正常写入逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:37:49