Source code for sdgx.data_exporters.csv_exporter
from __future__ import annotations
from functools import partial
from pathlib import Path
from typing import Generator
import pandas as pd
from sdgx.data_exporters.base import DataExporter
from sdgx.exceptions import CannotExportError
[docs]
class CsvExporter(DataExporter):
def __init__(self, **kwargs):
self.to_csv_kwargs = kwargs
if "header" in self.to_csv_kwargs:
self.to_csv_kwargs.pop("header")
if "index" in self.to_csv_kwargs:
self.to_csv_kwargs.pop("index")
[docs]
def write(
self,
dst: str | Path,
data: pd.DataFrame | Generator[pd.DataFrame, None, None],
) -> None:
if isinstance(data, pd.DataFrame):
data.to_csv(dst, index=False, **self.to_csv_kwargs)
elif isinstance(data, Generator):
with open(dst, "a") as file:
for df in data:
df.to_csv(file, header=file.tell() == 0, index=False, **self.to_csv_kwargs)
else:
raise CannotExportError(f"Cannot export data of type {type(data)} to csv")
from sdgx.data_exporters.extension import hookimpl
@hookimpl
def register(manager):
manager.register("CsvExporter", CsvExporter)