Metadata-Version: 2.4
Name: philiprehberger-csv-kit
Version: 0.1.0
Summary: Enhanced CSV reader and writer with automatic type inference.
Project-URL: Homepage, https://github.com/philiprehberger/py-csv-kit
Project-URL: Repository, https://github.com/philiprehberger/py-csv-kit
Project-URL: Issues, https://github.com/philiprehberger/py-csv-kit/issues
Author: Philip Rehberger
License-Expression: MIT
License-File: LICENSE
Keywords: csv,data,reader,type-inference,writer
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# philiprehberger-csv-kit

[![Tests](https://github.com/philiprehberger/py-csv-kit/actions/workflows/publish.yml/badge.svg)](https://github.com/philiprehberger/py-csv-kit/actions/workflows/publish.yml)
[![PyPI version](https://img.shields.io/pypi/v/philiprehberger-csv-kit.svg)](https://pypi.org/project/philiprehberger-csv-kit/)
[![License](https://img.shields.io/github/license/philiprehberger/py-csv-kit)](LICENSE)

Enhanced CSV reader and writer with automatic type inference.

## Install

```bash
pip install philiprehberger-csv-kit
```

## Usage

### Reading CSV

```python
from philiprehberger_csv_kit import read_csv

rows = read_csv("data.csv")
# [{"name": "Alice", "age": 30, "score": 9.5}, ...]
```

Values are automatically cast to `int`, `float`, `bool`, or `None`. Disable with `typed=False`:

```python
rows = read_csv("data.csv", typed=False)
# [{"name": "Alice", "age": "30", "score": "9.5"}, ...]
```

### Writing CSV

```python
from philiprehberger_csv_kit import write_csv

rows = [
    {"name": "Alice", "age": 30, "score": 9.5},
    {"name": "Bob", "age": 25, "score": 8.0},
]

write_csv("output.csv", rows)
write_csv("output.csv", rows, columns=["name", "age"])  # select columns
```

### Type Inference

```python
from philiprehberger_csv_kit import infer_types

raw = [{"val": "42"}, {"val": "3.14"}, {"val": "true"}, {"val": ""}]
typed = infer_types(raw)
# [{"val": 42}, {"val": 3.14}, {"val": True}, {"val": None}]
```

## API

| Function | Description |
|---|---|
| `read_csv(path, typed=True, encoding="utf-8")` | Read CSV file, return list of dicts. Infers types when `typed=True`. |
| `write_csv(path, rows, columns=None, encoding="utf-8")` | Write list of dicts to CSV. Optional column filter. |
| `infer_types(rows)` | Cast string values to int, float, bool, or None where possible. |

## Development

```bash
pip install -e .
python -m pytest tests/ -v
```

## License

MIT
