You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Polars Rust API从CSV字符串直接创建带自定义选项的DataFrame?

如何通过Polars Rust API直接从CSV字符串/读取器创建DataFrame并指定分隔符?

当然可以直接从CSV字符串或读取器创建DataFrame,完全不需要写入临时文件。Polars的CsvReader和LazyCsvReader都支持接收任何实现了std::io::Read的类型(比如Cursor<&str>或Cursor<Vec<u8>>),同时通过链式方法配置分隔符等解析选项。

方法1:使用CsvReader(立即加载)

你之前尝试CsvReader时没成功,是因为没调用with_separator方法配置自定义分隔符。正确写法如下:

use anyhow::Result;
use polars::prelude::*;
use std::io::Cursor;

fn main() -> Result<()> {
    let csv_str = "name|age|city
Alice|30|New York
Bob|25|London";

    // 用Cursor包裹字符串,作为CsvReader的输入
    let cursor = Cursor::new(csv_str);
    // 指定分隔符为|,完成解析
    let df = CsvReader::new(cursor)
        .with_separator(b'|')
        .finish()?;

    println!("{df}");
    Ok(())
}

方法2:使用LazyCsvReader(延迟加载,适合大数据)

如果你的CSV数据较大(比如来自请求的大 payload),推荐用延迟加载模式,避免一次性加载全部数据到内存:

use anyhow::Result;
use polars::prelude::*;
use std::io::Cursor;

fn main() -> Result<()> {
    let csv_str = "name|age|city
Alice|30|New York
Bob|25|London";

    let cursor = Cursor::new(csv_str);
    let df = LazyCsvReader::new(cursor)
        .with_separator(b'|')
        .finish()?
        .collect()?;

    println!("{df}");
    Ok(())
}

关键说明

  • 任何实现std::io::Read的类型都能作为CsvReader/LazyCsvReader的输入,包括网络请求的响应流(比如hyper的Body),不需要先写入本地文件。
  • 除了with_separator,还可以通过链式方法配置其他解析选项,比如with_header(true)、with_quote_char(b'"')等。

内容的提问来源于stack exchange,提问作者tenxsoydev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:22:36