如何向已有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
相关产品推荐
相关产品推荐

