CSV from_writer可以在stdout()上使用,但不能在from_path上使用

Jetychill

Rust初学者在这里。

我一直在尝试学习CSV板条箱,但在以下情况下遇到问题。

我的目标是:

  1. 解析嵌套数组
  2. 将列名称设置为数组值
  3. 写入CSV

首先,这里的代码输出的正是我想要的。

use serde::Serialize;
use serde::Deserialize;
use csv;
use serde_json;
use std::io;

#[derive(Debug,Serialize,Deserialize)]
#[serde(transparent)]
struct Parent {
    arr_field: Vec<Row>
}

#[derive(Debug,Serialize,Deserialize)]
struct Row {
    a: u8,
    b: u8,
    c: u8,
}

fn main() {
    let resp = r#" [[1,2,3],[3,2,1],[4,5,6]] "#;
    let mut wtr = csv::WriterBuilder::new().from_writer(io::stdout());

    let v: Parent = serde_json::from_str(resp).unwrap();

    for row in v.arr_field{
        wtr.serialize(row);
    }
}

此代码的输出是:

a,b,c
1,2,3
3,2,1
4,5,6

但是当我想将输出保存到本地文件而不是stdout时,如下所示:

    let mut wtr = csv::WriterBuilder::new().from_path("./foo.csv");

我在收到以下错误 wtr.serialize

error[E0599]: no method named `serialize` found for enum `std::result::Result<Writer<File>, csv::Error>` in the current scope

感谢您的帮助。

msrd0

错误消息告诉您所有您需要知道的-from_path返回aResult而不是a WriterBuilder,因为打开该文件可能并不总是有效。区别在于from_writer-无需打开文件,因此不会遇到错误。

要解决此问题,您只需使用.unwrap(),就像serde_json::from_str下面的代码行一样。遇到错误时,这将导致紧急情况,立即终止程序。

let mut wtr = csv::WriterBuilder::new().from_path("./foo.csv").unwrap();

请注意,这serialize还会返回结果,因此,您还应该添加.unwrap()for或其他逻辑来处理for循环中的错误。Rust可能会显示警告,指出有未使用的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在CSV上使用文件指针

来自分类Dev

可以创建csv但不能写入

来自分类Dev

PHP登录可以在XAMPP上使用,但不能在Web服务器上使用?

来自分类Dev

Google登录名可以在localhost上使用,但不能在在线域上使用

来自分类Dev

HTML | CSS | JS – Flip Cards可以在1上使用,但不能在4上使用

来自分类Dev

Pycharm调试器可以在Ubuntu上运行,但不能在Windows上使用相同的代码

来自分类Dev

httpClient.get在模拟器上可以,但不能在android设备上使用

来自分类Dev

在onclick之后使用.val可以在模拟器中使用,但不能在设备上使用

来自分类Dev

Path可在台式机上使用,但不能在移动设备上使用

来自分类Dev

键盘扩展可以在模拟器中使用,但不能在设备上使用

来自分类Dev

带参数的SQL插入对于MSAccess可以正常使用,但不能在SQL Server上使用

来自分类Dev

PHP在巨大的csv文件上使用fgetcsv

来自分类Dev

PHP在巨大的csv文件上使用fgetcsv

来自分类Dev

使用Python在CSV上添加新列

来自分类Dev

CSV文件输出,可在PC上使用

来自分类Dev

是否可以使用readr的write_csv()编写stdout?

来自分类Dev

CDN可以正常工作,但不能在ASP.NET上使用本地托管脚本

来自分类Dev

CSV上的转义字符

来自分类Dev

CSV字段上的OverloadDefinitions?

来自分类Dev

python 3.5 matplotlib从csv读取日期,但不能表示为X轴上的日期

来自分类Dev

python 3.5 matplotlib从csv读取日期,但不能表示为X轴上的日期

来自分类Dev

angularjs 1.3 javascript动画可以在ng-repeat上使用,但不能在ng-if上使用

来自分类Dev

android webkit音频可以在4.1.2及以下版本上使用,但不能在以上版本上使用吗?

来自分类Dev

在osx Mavericks上使用COPY或\ copy不能将csv批量数据加载到postgres中

来自分类Dev

csv.writer的UnicodeEncodeError

来自分类Dev

是否可以在MVC网站上使用自定义错误页面,但不能在Web API上使用?

来自分类Dev

简单的求和函数可以在jsfiddle中使用,但不能在Ionic上使用,我想念的是什么?

来自分类Dev

使用Python的CSV邮箱

来自分类Dev

使用javascript分割CSV

Related 相关文章

  1. 1

    在CSV上使用文件指针

  2. 2

    可以创建csv但不能写入

  3. 3

    PHP登录可以在XAMPP上使用,但不能在Web服务器上使用?

  4. 4

    Google登录名可以在localhost上使用,但不能在在线域上使用

  5. 5

    HTML | CSS | JS – Flip Cards可以在1上使用,但不能在4上使用

  6. 6

    Pycharm调试器可以在Ubuntu上运行,但不能在Windows上使用相同的代码

  7. 7

    httpClient.get在模拟器上可以,但不能在android设备上使用

  8. 8

    在onclick之后使用.val可以在模拟器中使用,但不能在设备上使用

  9. 9

    Path可在台式机上使用,但不能在移动设备上使用

  10. 10

    键盘扩展可以在模拟器中使用,但不能在设备上使用

  11. 11

    带参数的SQL插入对于MSAccess可以正常使用,但不能在SQL Server上使用

  12. 12

    PHP在巨大的csv文件上使用fgetcsv

  13. 13

    PHP在巨大的csv文件上使用fgetcsv

  14. 14

    使用Python在CSV上添加新列

  15. 15

    CSV文件输出,可在PC上使用

  16. 16

    是否可以使用readr的write_csv()编写stdout?

  17. 17

    CDN可以正常工作,但不能在ASP.NET上使用本地托管脚本

  18. 18

    CSV上的转义字符

  19. 19

    CSV字段上的OverloadDefinitions?

  20. 20

    python 3.5 matplotlib从csv读取日期,但不能表示为X轴上的日期

  21. 21

    python 3.5 matplotlib从csv读取日期,但不能表示为X轴上的日期

  22. 22

    angularjs 1.3 javascript动画可以在ng-repeat上使用,但不能在ng-if上使用

  23. 23

    android webkit音频可以在4.1.2及以下版本上使用,但不能在以上版本上使用吗?

  24. 24

    在osx Mavericks上使用COPY或\ copy不能将csv批量数据加载到postgres中

  25. 25

    csv.writer的UnicodeEncodeError

  26. 26

    是否可以在MVC网站上使用自定义错误页面,但不能在Web API上使用?

  27. 27

    简单的求和函数可以在jsfiddle中使用,但不能在Ionic上使用,我想念的是什么?

  28. 28

    使用Python的CSV邮箱

  29. 29

    使用javascript分割CSV

热门标签

归档