Path: blob/main/crates/polars-python/src/dataframe/serde.rs
7889 views
use std::io::{BufReader, BufWriter};1use std::ops::Deref;23use polars::prelude::*;4use polars_io::mmap::ReaderBytes;5use pyo3::prelude::*;67use super::PyDataFrame;8use crate::error::PyPolarsErr;9use crate::exceptions::ComputeError;10use crate::file::{get_file_like, get_mmap_bytes_reader};11use crate::utils::EnterPolarsExt;1213#[pymethods]14impl PyDataFrame {15/// Serialize into binary data.16fn serialize_binary(slf: Bound<'_, Self>, py_f: Py<PyAny>) -> PyResult<()> {17let file = get_file_like(py_f, true)?;18let mut writer = BufWriter::new(file);1920Ok(slf21.borrow()22.df23.write()24.serialize_into_writer(&mut writer)25.map_err(PyPolarsErr::from)?)26}2728/// Deserialize a file-like object containing binary data into a DataFrame.29#[staticmethod]30fn deserialize_binary(py: Python<'_>, py_f: Py<PyAny>) -> PyResult<Self> {31let file = get_file_like(py_f, false)?;32let mut file = BufReader::new(file);3334py.enter_polars_df(|| DataFrame::deserialize_from_reader(&mut file))35}3637/// Serialize into a JSON string.38#[cfg(feature = "json")]39pub fn serialize_json(&self, py: Python<'_>, py_f: Py<PyAny>) -> PyResult<()> {40let file = get_file_like(py_f, true)?;41let writer = BufWriter::new(file);42py.enter_polars(|| {43serde_json::to_writer(writer, &*self.df.read())44.map_err(|err| ComputeError::new_err(err.to_string()))45})46}4748/// Deserialize a file-like object containing JSON string data into a DataFrame.49#[staticmethod]50#[cfg(feature = "json")]51pub fn deserialize_json(py: Python<'_>, py_f: Bound<PyAny>) -> PyResult<Self> {52let mut mmap_bytes_r = get_mmap_bytes_reader(&py_f)?;5354py.enter_polars(move || {55let mmap_read: ReaderBytes = (&mut mmap_bytes_r).into();56let bytes = mmap_read.deref();57let df = serde_json::from_slice::<DataFrame>(bytes)58.map_err(|err| ComputeError::new_err(err.to_string()))?;59PyResult::Ok(df.into())60})61}62}636465