Source code for zero.io

"""Shortcuts for input and output."""

__all__ = [
    'load_pickle',
    'dump_pickle',
    'load_json',
    'dump_json',
    'load_jsonl',
    'dump_jsonl',
    'extend_jsonl',
]

import json
import pickle
from typing import Any, Iterable, List

from .types import JSON, PathLike


[docs]def load_pickle(path: PathLike, **kwargs) -> Any: """Load pickled object from a file. Args: path (`~zero.types.PathLike`): path to the file. The file must exist. kwargs: arguments for `pickle.load` Returns: The upickled object. """ with open(path, 'rb') as f: return pickle.load(f, **kwargs)
[docs]def dump_pickle(x: Any, path: PathLike, **kwargs) -> None: """Dump an object to a file in Pickle format. Args: x: the object path (`~zero.types.PathLike`): path to the file. If the file doesn't exist, it will be created, otherwise, overwritten. kwargs: arguments for `pickle.dump` """ with open(path, 'wb') as f: pickle.dump(x, f, **kwargs)
[docs]def load_json(path: PathLike, **kwargs) -> JSON: """Load JSON data from a file. Args: path (`~zero.types.PathLike`): path to the file. The file must exist. kwargs: arguments for `json.load` Returns: `~zero.types.JSON`: The data. """ with open(path) as f: return json.load(f, **kwargs)
[docs]def dump_json(x: JSON, path: PathLike, **kwargs) -> None: """Dump an object to a file in JSON format. Args: x (`~zero.types.JSON`): the JSON-compatible object path (`~zero.types.PathLike`): path to the file. If the file doesn't exist, it will be created, otherwise, overwritten. kwargs: arguments for `json.dump` """ with open(path, 'w') as f: json.dump(x, f, **kwargs)
[docs]def load_jsonl(path: PathLike, **kwargs) -> List[JSON]: """Load JSONL data from a file. Args: path (`~zero.types.PathLike`): path to the file. The file must exist. kwargs: arguments for `json.loads` Returns: List[`~zero.types.JSON`]: The data. """ with open(path) as f: return [json.loads(x, **kwargs) for x in f]
def _extend_jsonl(records: Iterable[JSON], path: PathLike, mode: str, **kwargs) -> None: with open(path, mode) as f: for x in records: json.dump(x, f, **kwargs) f.write('\n')
[docs]def dump_jsonl(records: Iterable[JSON], path: PathLike, **kwargs) -> None: """Dump an object to a file in JSONL format. Args: records (Iterable[`~zero.types.JSON`]): the JSON-compatible records path (`~zero.types.PathLike`): path to the file. If the file doesn't exist, it will be created, otherwise, overwritten. kwargs: arguments for `json.dump` """ _extend_jsonl(records, path, 'w', **kwargs)
[docs]def extend_jsonl(records: Iterable[JSON], path: PathLike, **kwargs) -> None: """Extend existing JSONL-file with new JSON-records. Args: records (Iterable[`~zero.types.JSON`]): the JSON-compatible records path (`~zero.types.PathLike`): path to the file. If the file doesn't exist, it will be created, otherwise, overwritten. kwargs: arguments for `json.dump` """ _extend_jsonl(records, path, 'a', **kwargs)