Rust、polars CSV:有没有办法从“impl BufRead”(或任何字节迭代器)读取 CSV?

问题描述 投票:0回答:1

我正在解析一种时髦的、专有的纯文本文件格式。

该格式包含 CSV 与非 CSV 的混合。我只对 CSV 部分感兴趣,它位于文件中的某个位置,周围是非 csv。

我想知道是否可以给

CsvReader
/
LazyCsvReader
类似
std::io::BufReader
甚至是包含 CSV 内容的
Vec<u8>
之类的东西,而不必提供
AsRef<Path>
(它必须指向文件,如果我没记错的话)。

我想通过以下方式之一初始化 CSV 读取器:

  • 给它一个
    BufReader
    来包裹我想读的行
  • 给它一个
    Vec<u8>
    ,其中包含我想要读取的所有字节。

这可以完成吗?还是我必须编写一个仅包含 CSV 的临时文件?

我尝试给

CsvReader
一个
BufReader<File>
,我已经将
.lines()
迭代器推进到我的数据开始的位置。但看起来
CsvReader
在阅读之前将光标移动到流的开头。

csv rust rust-polars
1个回答
0
投票

您可以将您的

Vec<u8>
(或任何其他实现
AsRef<[u8]>
包裹在
Cursor
中的东西传递给
CsvReader::new

use polars::prelude::*;
use std::io::Cursor;
fn main() {
    let bytes = b"a,b,c\nd,e,f\ng,h,i";
    let reader = CsvReader::new(Cursor::new(bytes));
    dbg!(reader.finish().unwrap());
}

我认为你不能直接使用

BufReader

© www.soinside.com 2019 - 2024. All rights reserved.