Metadata-Version: 2.2
Name: rowlogger
Version: 0.1.0
Summary: A lightweight schema-free CSV logger for Python.
Author: hiro0920753
License: MIT
Project-URL: Homepage, https://github.com/hiro0920753/rowlogger
Project-URL: Repository, https://github.com/hiro0920753/rowlogger
Project-URL: Issues, https://github.com/hiro0920753/rowlogger/issues
Keywords: csv,logger,logging,experiment,machine-learning,data-logging
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
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: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.21

# rowlogger
Python向けの軽量なスキーマレスCSVロガー。列定義なしで任意のデータをCSVへ記録できます。

Copyright (c) 2026 hiro0920753

This project is licensed under the MIT License. See LICENSE for details.

## 使い方

### 対応バージョン

このプロジェクトは Python 3.9+ を想定しています。

### インストール

このリポジトリをそのまま使う場合は、プロジェクト直下にある [rowlogger.py](rowlogger.py) を import できます。

```python
from rowlogger import RowLogger
```

### 基本的な使い方

`add()` で現在の行にデータを追加し、`next_row()` で次の行へ進めます。最後に `save_csv()` で CSV に保存します。

```python
from pathlib import Path
from rowlogger import RowLogger

logger = RowLogger()
logger.add({"epoch": 1, "loss": 0.5})
logger.add({"accuracy": 0.95})
logger.next_row()
logger.add({"epoch": 2, "loss": 0.4})

logger.save_csv("result.csv")
```

### 1列だけ追加する方法

列名を文字列で指定し、値を 1 つ渡すこともできます。

```python
logger = RowLogger()
logger.add("score", 0.75)
logger.save_csv("score.csv")
```

### 複数列をまとめて追加する方法

列名の iterable と値の iterable を対応させて渡します。

```python
logger = RowLogger()
logger.add(["epoch", "loss"], [3, 0.3])
logger.save_csv("multi.csv")
```

### NumPy やネストしたデータを保存する

NumPy 配列や `dict` / `list` などのネスト構造も自動的に変換されます。

```python
import numpy as np

logger = RowLogger()
logger.add({
    "array": np.array([1, 2, 3]),
    "meta": {"label": "train"},
})
logger.save_csv("numpy.csv")
```

### 追記保存

`append=True` を指定すると、既存の CSV に追記できます。

```python
logger = RowLogger()
logger.add({"epoch": 4, "loss": 0.2})
logger.save_csv("result.csv", append=True)
```

### 既存 CSV との列構成が違う場合

追記時にヘッダー構成が一致しないと、誤ってデータが崩れるのを防ぐため `ValueError` が発生します。

### テスト実行

テストは次のコマンドで実行できます。

```bash
python -m unittest test_rowlogger.py
```
