mirror of
https://github.com/rzmk/czv.git
synced 2025-12-19 08:09:24 +00:00
118 lines
3.7 KiB
Markdown
118 lines
3.7 KiB
Markdown
# czv
|
|
|
|
czv includes libraries for Rust, Python, and WebAssembly (JavaScript and TypeScript) providing CSV-related operations for data engineering and analysis tasks.
|
|
|
|
## Links
|
|
|
|
- czv GitHub repository: <https://github.com/rzmk/czv>
|
|
- Rust: [crates.io/crates/czv](https://crates.io/crates/czv) ([source code](https://github.com/rzmk/czv/tree/main/czv))
|
|
- WebAssembly (JavaScript/TypeScript): [npmjs.com/package/czv](https://www.npmjs.com/package/czv) ([source code](https://github.com/rzmk/czv/tree/main/czv-wasm))
|
|
- Python: [pypi.org/project/czv](https://pypi.org/project/czv/) ([source code](https://github.com/rzmk/czv/tree/main/czv-python))
|
|
|
|
## Installation and examples
|
|
|
|
In the following examples we'll get the total number of rows in the CSV data including the header row.
|
|
|
|
### Rust
|
|
|
|
```bash
|
|
cargo install czv
|
|
```
|
|
|
|
```rust
|
|
use czv::{RowCount, Result};
|
|
|
|
fn main() -> Result<()> {
|
|
let data: &str = "\
|
|
fruits,price
|
|
apple,2.50
|
|
banana,3.00
|
|
strawberry,1.50
|
|
";
|
|
let output: usize = RowCount::new().file_data(data).execute()?;
|
|
println!("{output}"); // 3
|
|
Ok(())
|
|
}
|
|
```
|
|
|
|
### JavaScript/TypeScript (WebAssembly)
|
|
|
|
```bash
|
|
bun install czv
|
|
```
|
|
|
|
Or use `npm`, `pnpm`, or `yarn` instead of `bun`.
|
|
|
|
```js
|
|
import init, * as czv from "czv";
|
|
// Must run `await init()` or `initSync()` first for web use
|
|
await init();
|
|
|
|
const data = `fruits,price
|
|
apple,2.50
|
|
banana,3.00
|
|
strawberry,1.50`;
|
|
|
|
const output = czv.rowCount({
|
|
file_data: data,
|
|
include_header_row: true,
|
|
});
|
|
|
|
console.log(output);
|
|
```
|
|
|
|
### Python
|
|
|
|
```bash
|
|
pip install czv
|
|
```
|
|
|
|
Or use [`uv pip`](https://github.com/astral-sh/uv) instead of `pip`.
|
|
|
|
```python
|
|
import czv
|
|
|
|
data: str = """fruits,price
|
|
apple,2.50
|
|
banana,3.00
|
|
strawberry,1.50"""
|
|
|
|
output: int = czv.row_count(file_data=data, include_header_row=True)
|
|
|
|
print(output) # 4
|
|
```
|
|
|
|
## Available operations
|
|
|
|
| czv (Rust) | czv-wasm (JS/TS) | czv-python | Summary |
|
|
| ---------------------------------------- | -------------------------------------- | ----------------------------------------------- | ------------------------- |
|
|
| [`count::RowCount`](czv/src/count.rs) | [`rowCount`](czv-wasm/src/count.rs) | [`count.row_count`](czv-python/src/count.rs) | Get the number of rows |
|
|
| [`count::ColumnCount`](czv/src/count.rs) | [`columnCount`](czv-wasm/src/count.rs) | [`count.column_count`](czv-python/src/count.rs) | Get the number of columns |
|
|
|
|
## Development
|
|
|
|
Each package has its own `README.md` with more info for that particular package.
|
|
|
|
You may generate docs with:
|
|
|
|
```bash
|
|
cargo doc --no-deps --workspace --open
|
|
```
|
|
|
|
## Notes
|
|
|
|
czv is inspired by the command-line tools [xsv](https://github.com/BurntSushi/xsv) and [qsv](https://github.com/jqnatividad/qsv), but czv is not intended to cover all of their commands or features.
|
|
|
|
Not all provided libraries may be in sync at a given time. See the [available operations table](#available-operations) for a common operation list between libraries (not all implementations for a given operation may be in sync either, for example they may not have the same builder/function arguments).
|
|
|
|
Here are a few expected features for each provided operation:
|
|
|
|
- czv (Rust)
|
|
- Provide both a builder (recommended and common for conditional parameters) and a function
|
|
- Provide documentation (docstrings) in Markdown format
|
|
- czv-wasm (Web, JavaScript and TypeScript)
|
|
- Use camelCase for exported functions
|
|
- Include common browser support to run in-browser
|
|
- Provide documentation (dosctrings) in TSDoc format
|
|
- czv-python
|
|
- Provide documentation (docstrings) and type hints for IDEs when developers are using the Python library (sourced from [czv-python/czv.pyi](czv-python/czv.pyi)) in Markdown format
|