本文感谢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库的用法相关推荐

  1. Beautiful Soup库的用法

    Beautiful Soup库的用法 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Bea ...

  2. Rust actix aiohttp_如何看待 Rust Actix 库的维护者退出开源界?

    更新:actix-web已经找到了接手维护者. 新的维护者看上去是一个比较靠谱的开发者,看到他也参与bastion这个项目,该项目旨在用Rust实现一个类Erlang VM(BEAM)的东东.感觉ac ...

  3. python gui界面设置数据储存在哪里_我整理的一些常用Python库!让你快速记住这些库的用法!建议收藏...

    Python的一大特色是其丰富的模块,基本上只要你能想到的常见的开发需求,都能找到别人已经实现的库直接使用,或者相关工具或则框架来辅助实现.但这对于新人来说也是一个问题:这么多库,我要从哪里学起?怎样 ...

  4. python xpath语法-Python爬虫之XPath语法和lxml库的用法

    本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...

  5. python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解

    前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 ...

  6. python爬虫系列之数据的存储(二):csv库的使用

    上一篇我们讲了怎么用 json格式保存数据,这一篇我们来看看如何用 csv模块进行数据读写. 一.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因 ...

  7. python中csv库_关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决...

    因为上次帮我们产品处理过一个文件,他想生成能excel处理操作的.但是上次由于时间非常紧张,所以并没有处理好. 正好无聊就来好好研究一下 ,找算法要了几个 csv文件.来好好玩一玩. 全篇使用了pyt ...

  8. Python 的 requests 库的用法

    Python爬虫利器一之Requests库的用法:http://cuiqingcai.com/2556.html Python利用Requests库写爬虫(一):http://www.jianshu. ...

  9. python中mako中loop_python中Mako库实例用法

    Mako是一个模板库.一种嵌入式的语言,能够实现简化组件布局以及继承,主要的用途也是和作用域有关,但是效果是最直接切灵活的,这些都是mako的基本功能,掌握了基础内容,接下来就是详细的了解讲述,从几个 ...

  10. Python Pillow(PIL)库的用法介绍(二)

    Python Pillow(PIL)库的用法介绍(二) 在上一篇文章中介绍了Pillow库的一些基本用法,参考:https://blog.csdn.net/weixin_43790276/articl ...

最新文章

  1. PLY库-实现最简单的sql语法的数据库
  2. 火狐自动换行 有空格
  3. IOS-UITextField-改变光标颜色
  4. FastDFS整合SpringBoot - 实现service
  5. python函数参数定义顺序_[python]函数默认参数顺序问题
  6. linux 目录大小是12288,为什么有些目录数的引用超过3,为什么很多目录的大小都是4096...
  7. 信息学奥赛一本通C++语言——1045:收集瓶盖赢大奖
  8. 实例:从一个文件中读取销售记录,并合并生成销售报告,实现销售册数,总销售额,平均售价...
  9. 什么是Scale Up和Scale Out?
  10. 美团最好战的那个男人要走了
  11. WPF实现特殊统计图
  12. 200Smart PLC 与丹佛斯变频器MODBUS RTU通讯实例
  13. iOS 开发:『Runtime』详解(二)Method Swizzling
  14. pyscripter支持python什么版本_PyScripter|PyScripter(Python集成开发环境)下载v3.4.2.0官方版64位/32位 - 欧普软件下载...
  15. NVIDIA Tesla T4 GPU参数
  16. 你还不会用python进行数据分析吗
  17. Arduino and the SPI bus
  18. 【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
  19. 射频开关-RF Switch拆机
  20. vs2017+ivf+abaqus

热门文章

  1. 64位Oracle 11g 使用PL/SQL
  2. win7和xp,哪个才是你的选择?
  3. Symfony2Book16:Symfony2内部03-事件调度
  4. ExtJS 4正式版今天发布
  5. Java-集合第三篇List集合
  6. 16、1.6 常用Java开发工具
  7. docker制作容器(待更新)
  8. 单层感知机实现或运算
  9. 实验报告:统计字符串中子字符串出现的次数
  10. JQ-实现图片纵向滚动的效果