#web-scraping #rust #export-to-csv #yahoo-finance #writer
#веб-очистка #Ржавчина #экспорт в csv #yahoo-финансы #писатель
Вопрос:
use yahoo_finance::{history, Interval, Timestamped};
#[tokio::main]
async fn main() {
let data = history::retrieve_interval("AAPL", Interval::_6mo).await.unwrap();
for end in amp;data {
println!("Close ${:.2}, {}", end.close,end.datetime().format("%b %e %y)"));
}
}
В принципе, я хочу взять эту программу и получить выходные данные в виде файла .csv, а не println!(), я просто использовал println! чтобы убедиться, что программа работает. Я все еще новичок в Rust и программировании в целом (прошу прощения, если я кажусь необразованным). Я просто создаю эту программу как нечто практичное, что я могу использовать (работая в финансовой отрасли) и основываться на ней.
Ответ №1:
Вы можете сделать именно это, используя writeln!
макрос вместо println!
. Вам понадобится что-то, что реализует Write
признак, например a 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 amp;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!
но вместо этого возвращает a String
. Итак, если вы соберете все это вместе, вы сможете создать файл с именем, оканчивающимся на .csv
, а затем использовать API для записи в него данных в цикле for, как вы делали с println!
.
Вероятно, более подходящий способ сделать это — найти csv
ящик, который может предоставить вам более csv
конкретную функциональность. Быстрый поиск привел к этой библиотеке.
Комментарии:
1. Существует также
writeln!
макрос, который выполняет то же самое,println!
что и, за исключением того, что он позволяет вам указывать выходной файл вместо печати в стандартный вывод.