Rust : CSV库的用法
本文感谢42的帮助。
Rust有一个库CSV,可以用来处理相关的CSV文件。
相关资料见:http://burntsushi.net/rustdoc/csv/
比如有个CSV文件,其结构是(有表头的):
以下读出CSV,可以有两种组织方式:
解析成struct,非常方便,赞!
extern crate csv;
use std::time::{Duration, SystemTime};
use csv::{ReaderBuilder, StringRecord};
#[derive(Serialize, Deserialize, Debug)]struct Bar{a1: String,a2: f64,a3: f64,a4: f64,a5: f64,a6: f64,a7: f64,a8: f64,a9: f64,a10: f64,a11: f64,a12: f64,
}fn csv_to_struct(path:String,has_header:bool)-> Result<VBar,std::io::Error>{let mut vb :VBar = VBar{a1: Vec::new(),a2: Vec::new(),a3: Vec::new(),a4: Vec::new(),a5: Vec::new(),a6: Vec::new(),a7: Vec::new(),a8: Vec::new(),a9: Vec::new(),a10: Vec::new(),a11: Vec::new(),a12: Vec::new(),};let mut rdr =ReaderBuilder::new().has_headers(false).from_path(path).unwrap();let records = rdr.records().collect::<Result<Vec<StringRecord>, csv::Error>>()?;let mut i = 0;for record in records{let record = fill_nan(&record,0.0);i = i + 1;if has_header == true && i==1 {continue;}else{vb.a1.push(record[0].to_string());vb.a2.push(record[1].parse::<f64>().unwrap());vb.a3.push(record[2].parse::<f64>().unwrap());vb.a4.push(record[3].parse::<f64>().unwrap());vb.a5.push(record[4].parse::<f64>().unwrap());vb.a6.push(record[5].parse::<f64>().unwrap());vb.a7.push(record[6].parse::<f64>().unwrap());vb.a8.push(record[7].parse::<f64>().unwrap());vb.a9.push(record[8].parse::<f64>().unwrap());vb.a10.push(record[9].parse::<f64>().unwrap());vb.a11.push(record[10].parse::<f64>().unwrap());vb.a12.push(record[11].parse::<f64>().unwrap());}}Ok(vb)
}
三、关于struct的优化
如何把bar的结构精准地描述(f64,String…)?
我们发现:
如果去掉表头,形成以下模式,则可以把bar结构中字段进行精确解析。
extern crate stopwatch;
extern crate csv;
extern crate rustc_serialize;
use stopwatch::Stopwatch;
use std::thread;
use std::io;
use std::time::{Duration, Instant};#[derive(RustcDecodable, RustcEncodable)]
struct bar {market: String,code: String,date: String,open: f64,high: f64,low: f64,close: f64,volume: f64,openInterests: f64,
}
fn main() {let mut rdr =csv::Reader::from_path("C:\\IC1505.csv").unwrap();//不要求是读出第一行段首,否则加.has_headers().let mut data: Vec<bar> = Vec::new();for record in rdr.decode() {let mut temp: bar = record.unwrap();println!("len: =>{:?},{},{},{},{}",data.len(),temp.market,temp.code,temp.date,temp.close);data.push(temp);}thread::sleep_ms(500000);
}
四、csv库如何读出汉字?
比如:
extern crate csv;
extern crate rustc_serialize;
extern crate encoding;use std::io;
use std::io::prelude::*;
use std::fs::File;use encoding::{Encoding, DecoderTrap};
use encoding::all::GB18030;//可以转成汉字的字库fn main() {let path = "C:\\Users\\Desktop\\test.csv";let mut f = File::open(path).ok().expect("cannot open file"); let mut reader: Vec<u8> = Vec::new();f.read_to_end(&mut reader).ok().expect("can not read file");let mut chars = String::new();GB18030.decode_to(&mut reader, DecoderTrap::Ignore, &mut chars);let mut rdr = csv::Reader::from_string(chars).has_headers(true);for row in rdr.decode() {let (x, y, r): (String, String, String) = row.unwrap();println!("({}, {}): {:?}", x, y, r);}
}
Rust : CSV库的用法相关推荐
- Beautiful Soup库的用法
Beautiful Soup库的用法 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Bea ...
- Rust actix aiohttp_如何看待 Rust Actix 库的维护者退出开源界?
更新:actix-web已经找到了接手维护者. 新的维护者看上去是一个比较靠谱的开发者,看到他也参与bastion这个项目,该项目旨在用Rust实现一个类Erlang VM(BEAM)的东东.感觉ac ...
- python gui界面设置数据储存在哪里_我整理的一些常用Python库!让你快速记住这些库的用法!建议收藏...
Python的一大特色是其丰富的模块,基本上只要你能想到的常见的开发需求,都能找到别人已经实现的库直接使用,或者相关工具或则框架来辅助实现.但这对于新人来说也是一个问题:这么多库,我要从哪里学起?怎样 ...
- python xpath语法-Python爬虫之XPath语法和lxml库的用法
本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...
- python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解
前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 ...
- python爬虫系列之数据的存储(二):csv库的使用
上一篇我们讲了怎么用 json格式保存数据,这一篇我们来看看如何用 csv模块进行数据读写. 一.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因 ...
- python中csv库_关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决...
因为上次帮我们产品处理过一个文件,他想生成能excel处理操作的.但是上次由于时间非常紧张,所以并没有处理好. 正好无聊就来好好研究一下 ,找算法要了几个 csv文件.来好好玩一玩. 全篇使用了pyt ...
- Python 的 requests 库的用法
Python爬虫利器一之Requests库的用法:http://cuiqingcai.com/2556.html Python利用Requests库写爬虫(一):http://www.jianshu. ...
- python中mako中loop_python中Mako库实例用法
Mako是一个模板库.一种嵌入式的语言,能够实现简化组件布局以及继承,主要的用途也是和作用域有关,但是效果是最直接切灵活的,这些都是mako的基本功能,掌握了基础内容,接下来就是详细的了解讲述,从几个 ...
- Python Pillow(PIL)库的用法介绍(二)
Python Pillow(PIL)库的用法介绍(二) 在上一篇文章中介绍了Pillow库的一些基本用法,参考:https://blog.csdn.net/weixin_43790276/articl ...
最新文章
- PLY库-实现最简单的sql语法的数据库
- 火狐自动换行 有空格
- IOS-UITextField-改变光标颜色
- FastDFS整合SpringBoot - 实现service
- python函数参数定义顺序_[python]函数默认参数顺序问题
- linux 目录大小是12288,为什么有些目录数的引用超过3,为什么很多目录的大小都是4096...
- 信息学奥赛一本通C++语言——1045:收集瓶盖赢大奖
- 实例:从一个文件中读取销售记录,并合并生成销售报告,实现销售册数,总销售额,平均售价...
- 什么是Scale Up和Scale Out?
- 美团最好战的那个男人要走了
- WPF实现特殊统计图
- 200Smart PLC 与丹佛斯变频器MODBUS RTU通讯实例
- iOS 开发:『Runtime』详解(二)Method Swizzling
- pyscripter支持python什么版本_PyScripter|PyScripter(Python集成开发环境)下载v3.4.2.0官方版64位/32位 - 欧普软件下载...
- NVIDIA Tesla T4 GPU参数
- 你还不会用python进行数据分析吗
- Arduino and the SPI bus
- 【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
- 射频开关-RF Switch拆机
- vs2017+ivf+abaqus