【问题标题】:Converting an output (println!) to .csv file将输出 (println!) 转换为 .csv 文件
【发布时间】:2021-05-25 09:06:06
【问题描述】:
use yahoo_finance::{history, Interval, Timestamped};

#[tokio::main]

async fn main() {

    let data = history::retrieve_interval("AAPL", Interval::_6mo).await.unwrap();

    for end in &data {

        println!("Close ${:.2}, {}", end.close,end.datetime().format("%b %e %y)"));
    }
}

基本上,我想使用这个程序,并将输出作为 .csv 文件,而不是 println!(),我只是使用了 println!以确保程序正常工作。我对 Rust 和一般编程仍然很陌生(如果我听起来没有受过教育,请道歉)。我只是将这个程序作为我可以使用的实用程序(在金融行业工作)并以此为基础。

【问题讨论】:

    标签: web-scraping rust export-to-csv yahoo-finance writer


    【解决方案1】:

    您可以通过使用writeln! 宏而不是println! 来做到这一点。您将需要实现Write 特征的东西,例如File。这需要作为第一个参数传递给writeln!

    你的例子会这样写:

    use yahoo_finance::{history, Interval, Timestamped};
    
    #[tokio::main]
    async fn main() {
        let data = history::retrieve_interval("AAPL", Interval::_6mo).await.unwrap();
    
        // create a file called data.csv, overwriting the file if it already existed
        let mut file = std::fs::File::create("data.csv");
    
        for end in &data {
            // write to the file instead of standard output
            writeln!(file, "Close ${:.2}, {}", end.close,end.datetime().format("%b %e %y"));
        }
    }
    

    我删除了日期格式的括号,我认为这是错误的?无论如何,我希望我能帮上忙。

    正如其他人所指出的,这可能不是最干净的解决方案,您可能必须注意自己引用某些内容等,因此考虑使用 CSV 库可能也是一个好主意。但在这种情况下,我认为它应该像这样正常工作。

    【讨论】:

      【解决方案2】:

      有一个std::fs::File API 可让您创建文件。在这些文件中,有一个write 函数,您可以将String 传递给该函数。有一个 format! 宏可以让您执行与 println! 相同的操作,但它会返回 String。因此,如果您将所有这些拼凑在一起,您应该能够创建一个名称以 .csv 结尾的文件,然后像使用 println! 一样使用 API 在 for 循环中向其写入内容。

      可能更合适的方法是查找csv 板条箱,它可以为您提供更多csv 特定功能。快速搜索了this library

      【讨论】:

      • 还有一个writeln! 宏,它与println! 做同样的事情,除了它允许你指定一个输出文件而不是打印到标准输出。
      猜你喜欢
      • 2014-11-26
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2020-05-19
      • 2013-07-03
      • 2021-01-01
      相关资源
      最近更新 更多