我正在解析一种时髦的、专有的纯文本文件格式。
该格式包含 CSV 与非 CSV 的混合。我只对 CSV 部分感兴趣,它位于文件中的某个位置,周围是非 csv。
我想知道是否可以给
CsvReader
/LazyCsvReader
类似 std::io::BufReader
甚至是包含 CSV 内容的 Vec<u8>
之类的东西,而不必提供 AsRef<Path>
(它必须指向文件,如果我没记错的话)。
我想通过以下方式之一初始化 CSV 读取器:
BufReader
来包裹我想读的行Vec<u8>
,其中包含我想要读取的所有字节。这可以完成吗?还是我必须编写一个仅包含 CSV 的临时文件?
我尝试给
CsvReader
一个BufReader<File>
,我已经将.lines()
迭代器推进到我的数据开始的位置。但看起来 CsvReader
在阅读之前将光标移动到流的开头。
您可以将您的
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
。