cts_csv/csv/
write.rs

1use std::{fs::{create_dir_all, File}, path::Path};
2
3use csv::Writer;
4use serde::Serialize;
5
6/// 写入数据到指定的文件路径
7pub fn write<S>(path: &str, filename: &str, data: &[S]) -> Result<(), std::io::Error>
8where
9    S: Serialize,
10{
11    create_dir_all(path)?;
12    let file = File::create(format!("{}/{}", path, filename))?;
13    let mut writer = Writer::from_writer(file);
14
15    for row in data {
16        writer.serialize(row)?;
17    }
18
19    Ok(())
20}
21
22
23/// 写入数据到指定的文件路径
24pub fn write_file<S>(path: &str, data: &[S]) -> Result<(), std::io::Error>
25where
26    S: Serialize,
27{
28    let (parent_path, _) = split_path_strings(path);
29    if let Some(path) = parent_path {
30         create_dir_all(path)?;
31    }
32    let file = File::create(path)?;
33    let mut writer = Writer::from_writer(file);
34
35    for row in data {
36        writer.serialize(row)?;
37    }
38
39    Ok(())
40}
41
42fn split_path_strings(path: &str) -> (Option<String>, Option<String>) {
43    let path_obj = Path::new(path);
44    let parent = path_obj.parent()
45        .and_then(|p| p.to_str())
46        .map(|s| s.to_string());
47    let file_name = path_obj.file_name()
48        .and_then(|name| name.to_str())
49        .map(|s| s.to_string());
50
51    (parent, file_name)
52}