Rust每週一庫 csv 檔案讀寫庫

2021-10-02 06:36:50 字數 2961 閱讀 5506

這次搬運的庫是很多資料分析師、資料科學家、以及金融分析師常用的csv檔案庫。

用rust實現的乙個高效能、靈活的csv讀寫器,支援serde.

將以下配置加進你的cargo.toml:

[dependencies]

csv = "1.1"

簡單示範如何從stdin讀取csv資料並通過stdout將每一條記錄列印出來。

use std::error::error;

use std::io;

use std::process;

fn example() -> result<(), box> ", record);

}ok(())

}fn main() ", err);

process::exit(1);

}}

以上的例子可以用以下命令執行:

$ git clone git:

$ cd rust-csv

$ cargo run --example cookbook-read-basic < examples/data/smallpop.csv

示範如何從stdin讀取csv資料並且將資料對映到定製結構體。結構體中的成員名稱會預設與csv資料中的表頭相對應。

use std::error::error;

use std::io;

use std::process;

use serde::deserialize;

#[derive(debug, deserialize)]

struct record

fn example() -> result<(), box> ", record);

}ok(())

}fn main() ", err);

process::exit(1);

}}

以上的例子可以用以下命令執行:

$ git clone git:

$ cd rust-csv

$ cargo run --example cookbook-read-serde < examples/data/smallpop.csv

extern crate csv;

use std::error::error;

use std::io;

use std::process;

fn example() -> result<(), box>

fn main() ", err);

process::exit(1);

}}

以上的例子可以用以下命令執行:

$ git clone git:

$ cd rust-csv

$ cargo run --example cookbook-write-basic > /tmp/******pop.csv

extern crate csv;

#[macro_use]

extern crate serde_derive;

use std::error::error;

use std::io;

use std::process;

#[derive(debug, serialize)]

struct record

fn example() -> result<(), box> )?;

wtr.serialize(record )?;

wtr.flush()?;

ok(())

}fn main() ", err);

process::exit(1);

}}

以上的例子可以用以下命令執行:

$ git clone git:

$ cd rust-csv

$ cargo run --example cookbook-write-serde > /tmp/******pop.csv

extern crate csv;

use std::env;

use std::error::error;

use std::io;

use std::process;

fn run() -> result<(), box> ;

// 通過stdin建立csv讀取器

// 通過stdout建立csv寫入器

let mut rdr = csv::reader::from_reader(io::stdin());

let mut wtr = csv::writer::from_writer(io::stdout());

// 在讀取資料記錄之前,先寫入表頭記錄

wtr.write_record(rdr.headers()?)?;

// 通過rdr遍歷所有記錄,然後通過wre寫入只含有「query」的記錄

for result in rdr.records()

}// csv寫入器使用內部緩衝器,要記得完成後重新整理清空。

wtr.flush()?;

ok(())

}fn main() ", err);

process::exit(1);

}}

在編譯之後,執行這段**時加入ma作為查詢語句,可以看到結果中只有一條記錄復合查詢條件:

$ cargo build

$ ./csvtutor ma < uspop.csv

city,state,population,latitude,longitude

reading,ma,23441,42.5255556,-71.0958333

本文**於 cookbook.

Rust每週一知 Rust中的讀寫鎖RwLock

本文簡單介紹 rust 中的讀寫鎖rwlock,內容概覽如下 基本概念 rust中的rwlock實現 在電腦科學中,有一些經典的同步問題,讀者 作家問題就是其中乙個,該問題涉及多個併發執行緒試圖同時訪問同一共享資源的情況。讀者 作家問題 我們擁有一種資源 例如,資料庫 可以由不修改資源的讀者和可以修...

Rust每週一庫 hyper 底層http庫

現在說到寫應用,網路框架肯定是必不可少的。今天就給大家簡單介紹一下hyper。hyper是乙個偏底層的http庫,支援http 1和http 2,支援非同步rust,並且同時提供了服務端和客戶端的api支援。很多同學可能覺得既然hyper是個偏底層的框架,那是不是就不需要去了解了呢?首先很多上層的框...

Rust每週一庫 failure 錯誤處理庫

錯誤處理在生產級別的 中一直都是乙個重點。在原型階段,愉快地使用unwrap可以確保思路和精力被集中用在業務邏輯開發上。不過對於最終要上線的 優雅的處理錯誤卻是至關重要的。原生rust錯誤處理的工具有std error error 一般我們會看到box的形式 操作符以及enum供我們自定義錯誤型別。...