Rust读写CSV文件 一维Vec类型元素、二维Vec类型元素写入CSV文件

本文主要介绍Rust读写CSV文件方法, Vec类型元素基本操作方法,Rust把一维Vec类型元素、二维Vec类型元素写入CSV文件方法。

实例测试:

要求读“log.csv”文件数据,把“时间”列数据和“次数”列数据写入日志处理结果1.csv文件,把“时间”列数据写入日志处理结果2.csv文件。

log.csv文件:
在这里插入图片描述
日志处理结果1.csv文件:
在这里插入图片描述
日志处理结果2.csv文件:
在这里插入图片描述

实例代码

Cargo.toml添加依赖

[dependencies]
csv = "1.3.0"

main.rc文件代码

#[macro_use]
pub mod macros;
use csv::ReaderBuilder;
use csv::WriterBuilder;
use std::fs::File;
use std::str;fn main() -> Result<(), Box<dyn std::error::Error>> {//创建一维Veclet vec_headers = Vec::from(["日期时间".to_string(),"次数".to_string(),]); //创建一维Veclet vec_headers_2 = Vec::from(["日期时间".to_string(),]); // 创建二维Veclet mut vec_matrix = Vec::new();//创建一维Veclet mut vec_date = Vec::new();  let input_path = "log.csv";/* 读取csv日志文件,并提取主要数据 */read_csv_file(&input_path, &mut vec_matrix, &mut vec_date).expect("Failed to read CSV file");/* 处理结果写入csv文件 */let out_path_1 = "日志处理结果1.csv";let _z = write_csv_file(&out_path_1, &vec_headers, &vec_matrix);let out_path_2 = "日志处理结果2.csv";let _z = write_csv_file_2(&out_path_2, &vec_headers_2,&vec_date);//打印等待用户按回车键,退出控制台println!("温馨提示:请按回车键退出......");// 等待用户按下回车键let _ = std::io::stdin().read_line(&mut String::new()).expect("TODO:panic message");Ok(())
}/*读取csv文件,并提取主要数据 */
pub fn read_csv_file(path: &str,vec_matrix: &mut Vec<Vec<String>>,vec_date: &mut Vec<String>,
) -> Result<(), Box<dyn std::error::Error>> {let file = File::open(path)?;let mut reader = ReaderBuilder::new().from_reader(file);for result in reader.records() {//创建一维Veclet mut vec = Vec::new();let record = result?;// 处理每一行的数据//println!("{:?}", record);//println!("{:?}", record.get(0));//println!("{}", record.get(0).unwrap());vec_date.push(record.get(0).unwrap().to_string());vec.push(record.get(0).unwrap().to_string());vec.push(record.get(2).unwrap().to_string());//打印//println!("{:?}", vec);//添加到二维Vecvec_matrix.push(vec);}//打印println!("vec_date:");println!("{:?}", vec_date);//打印println!("vec_matrix包含记录{}条:", vec_matrix.len());for vec_item in vec_matrix.iter() {println!("{:?}", vec_item);}Ok(())
}/*把二维Vec写入csv文件 */
pub fn write_csv_file(path: &str,headers: &Vec<String>,records: &Vec<Vec<String>>,
) -> Result<(), Box<dyn std::error::Error>> {let file = File::create(path)?;let mut writer = WriterBuilder::new().from_writer(file);writer.write_record(headers)?;for record in records {writer.write_record(record)?;}// 确保所有数据都被写入writer.flush()?;println!("已成功写入“{}”文件", path);Ok(())
}/*把一维Vec写入csv文件 */
pub fn write_csv_file_2(path: &str,headers: &Vec<String>,record: &Vec<String>,
) -> Result<(), Box<dyn std::error::Error>> {let file = File::create(path)?;let mut writer = WriterBuilder::new().from_writer(file);writer.write_record(headers)?;// 遍历Vec,将每个元素作为一行写入CSVfor item in record {// 将每个String元素作为单个记录写入CSVwriter.write_record(&[&item])?;}// 确保所有数据都被写入writer.flush()?;println!("已成功写入“{}”文件", path);Ok(())
}

macros.rs文件代码

#[allow(unused_macros)]
#[macro_export]
macro_rules! hashmap {($( $key: expr => $val: expr ),*) => {{let mut map = ::std::collections::HashMap::new();$( map.insert($key, $val); )*map}}
}#[allow(unused_macros)]
#[macro_export]
macro_rules! hashmap_s {($( $key: expr => $val: expr ),*) => {{let mut map = ::std::collections::HashMap::new();$( map.insert($key.to_string(), $val); )*map}}
}#[macro_export]
macro_rules! vec_s {($( $val: expr ),*) => {{let mut vec = ::std::vec::Vec::new();$( vec.push($val.to_string()); )*vec}}
}#[macro_export]
macro_rules! hashset {($( $val: expr ),*) => {{let mut vec = ::std::collections::HashSet::new();$( vec.insert($val); )*vec}}
}#[macro_export]
macro_rules! hashset_s {($( $val: expr ),*) => {{let mut vec =  ::std::collections::HashSet::new();$( vec.insert($val.to_string()); )*vec}}
}
运行结果

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五一 Llama 3 超级课堂 大完结

首先很感谢上海人工智能实验室和机智流等相关举办单位组织的这个活动&#xff0c;在Llama3发布不多时就让我们可以体验到大模型的进步&#xff0c;回顾整个活动&#xff0c;从内容上看是相当用心的。从A100的提供使用到大模型部署&#xff0c;微调&#xff0c;Agent功能应用和数…

Python中tkinter编程入门1

1 tkinter库简介 tkinter是Python的标准库&#xff0c;用来进行GUI&#xff08;Graphical User Interface&#xff0c;图形用户界面&#xff09;编程。 2 导入tkinter库 tkinter是Python默认的GUI库&#xff0c;因此&#xff0c;IDLE中已经包含了该库&#xff0c;使用时无需…

区块链领域,被问得最多的问题

在区块链领域&#xff0c;被问得最多的问题通常围绕几个核心主题&#xff0c;包括基本概念、技术挑战、应用前景以及它对社会经济的影响。以下是几个经常被提及的问题&#xff1a; 什么是区块链&#xff1f; 人们常常好奇区块链的基本定义&#xff0c;以及它是如何作为一种去中…

【网络编程】HTTPS协议详解

引言 HTTPS是HTTP协议的安全版本&#xff0c;通过使用SSL&#xff08;安全套接层&#xff09;或TLS&#xff08;传输层安全&#xff09;协议加密通信&#xff0c;为数据传输提供了保密性、完整性和身份认证。与传统的HTTP相比&#xff0c;HTTPS能够防止敏感信息被窃取、篡改和…

【HTTP下】总结{重定向/cookie/setsockopt/流操作/访问网页/总结}

文章目录 1.请求头2.cookie理解 3.vim跳转/搜索4.setsockopt被重用的意思 5.流操作5.1定位读取指针5.2ifstram::read() 6.总结6.1 百度搜索框搜索功能字符6.2请求uri请求和响应的第一行都有http版本请求内容里有GET /favicon.ico HTTP/1.1 6.3访问网页Fiddler抓包原理&#xff…

Python进阶之-hashlib详解

✨前言&#xff1a; &#x1f31f;什么是hash&#xff1f; 在计算机科学中&#xff0c;“哈希” (Hash) 是一种算法&#xff0c;它接受输入&#xff08;或者“消息”&#xff09;&#xff0c;并返回一个固定长度的字符串&#xff0c;这个字符串称为输入的 “哈希值” 或者 “…

ASP.NET MVC 4升级迁移到ASP.NET MVC 5

背景&#xff1a;今天针对一个老项目进行框架升级&#xff0c;老项目使用的是MVC 4&#xff0c;现在要升级到MVC5。 备份项目.NET升级4.5以上版本通过Nuget&#xff0c;更新或者直接安装包 包名oldVersionnewVersionMicrosoft.AspNet.Mvc4.0.05.x.xMicrosoft.AspNet.Razor2.0…

树莓派4b测量PM2.5

1.GP2Y1010AU0F粉尘传感器连接图 2. GP2Y1010AU0F工作原理 工作原理 传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。 3.源代码 main.py # coding=UTF-8 import RPi.GPIO as GPIO from ADC import ADS1015…

上传文件客户端签名直传

上传文件的客户端签名直传是一种常用的将文件直接上传到云存储服务如Amazon S3、阿里云OSS等云服务上的技术手段。这种方法通常用于减轻服务器负担&#xff0c;并提高上传效率。 以下是实现客户端签名直传的基本步骤&#xff1a; 1. 客户端请求上传权限 客户端&#xff08;如…

如何让路由器分配固定网段ip

一.wan和lan wan广域网&#xff0c;负责连接互联网 lan局域网&#xff0c;负责保证一个区域内的设备可以互相通讯&#xff0c;比如wife就是让所有连接设备处于同一网段下 一.问题导入 1.我们平时在虚拟机和实体机通信时 必须让它们位于同一ip网段下。 通过winscp等软件进行…

链表的原理和实现python

为什么需要链表 数组的底层原理是顺序存储&#xff0c;是一块连续的内存空间&#xff0c;有了这块内存空间的首地址&#xff0c;就能直接通过索引计算出任意位置的元素地址。 链表不一样&#xff0c;一条链表并不需要一整块连续的内存空间存储元素。链表的元素可以分散在内存…

加速数据要素流通,“隐语杯”全国高校隐私计算大赛正式启动报名!

当前&#xff0c;我国数字经济正处在一个快速增长的阶段&#xff0c;数据要素逐渐成为促进社会经济繁荣的关键驱动力。随着国家对数据治理及隐私保护政策的不断完善&#xff0c;隐私计算技术的创新和实践应用变得愈发重要。面对数据安全与隐私保护的双重挑战&#xff0c;如何实…

高性价比开放式耳机有哪些?五大好评热卖开放式耳机推荐

近年来&#xff0c;开放式耳机凭借其独特的开放式声学设计&#xff0c;给用户带来了动态空间的音质享受。在佩戴等方面也带来了一定的舒适度。然而&#xff0c;面对满目的耳机品牌&#xff0c;新手小白往往会不知道如何挑选。那如何选择一款适合自己的产品呢&#xff1f;我整理…

了解如何有效地利用 Swagger UI

在讨论程序员职业生涯中的一些琐碎但必须的任务时&#xff0c;众所周知&#xff0c;编写和维护文档是他们最不喜欢的活动之一。程序员普遍不愿意编写注释和文档&#xff0c;同时又对那些没有留下适当文档的同事感到失望。这种矛盾主要是因为文档管理是一个繁琐的过程&#xff0…

Yolov8-pose关键点检测:卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,小幅涨点的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡如…

计算机专业全解析:热门方向与就业前景

在每年的高考填报中&#xff0c;计算机专业总是出现在填报热门专业榜单之中&#xff0c;可见计算机类专业的热门程度。 然而&#xff0c;随着时代和教育的发展&#xff0c;计算机大类下细分出越来越多的专业&#xff0c;除了核心的计算机科学与技术、软件工程外&#xff0c;还…

计算机毕业设计 | springboot+vue凌云在线阅读平台 线上读书系统(附源码)

1&#xff0c;绪论 随着社会和网络技术的发展&#xff0c;网络小说成为人们茶钱饭后的休闲方式&#xff0c;但是现在很多网络小说的网站都是收费的&#xff0c;高额的收费制度是很多人接受不了的&#xff0c;另外就是很多小说网站都会有大量的弹窗和广告&#xff0c;这极大的影…

代码随想录第四十七天|打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 代码如下&#xff1a; 打家劫舍问题需要注意相邻房子不能偷&#xff0c;因此在偷与不偷的选择上可以归类为&#xff1a; 偷当前&#xff08;i&#xff09;的房子&#xff0c;则子问题变为前i-2个房子的偷取金额…

探秘编程之旅:Baidu Comate 智能代码助手的魔法揭秘

目录 Baidu Comate智能代码助手1.场景需求2.安装步骤3.功能介绍3.1 /指令3.2 插件3.3 #知识 4.使用体验5.总结 Baidu Comate智能代码助手 智能编程助手的意义在于提升编程体验和效率&#xff0c;使开发人员能够更轻松、更快速地完成编码任务&#xff0c;是如今人工智能技术的一…

【cpp题解】最大子数组和(53)

目录 前言我的思路思路一思路二 我的代码 前言 今天继续来学一学动态规划&#xff0c;一上来就遇到了网红题&#xff0c;据说是以前清北的考研题哈哈哈哈。挺难的&#xff0c;让我做的话&#xff0c;那就是双层循环暴力解&#xff0c;思路很巧妙&#xff0c;学到啦~ 我的思路…