pyimporters-csv
Sherpa knowledge import plugin for CSV, Excel and plain text files.
It registers three parsers through the pyimporters.plugins entry point group:
| Plugin | Class | Extensions |
|---|---|---|
text |
pyimporters_csv.text:TXTKnowledgeParser |
txt, text, zip |
csv |
pyimporters_csv.csv_parser:CSVKnowledgeParser |
csv, tsv, zip |
excel |
pyimporters_csv.excel:ExcelKnowledgeParser |
xls, xlsx |
Each parser yields Term objects from pyimporters_plugins.base. Archives
(zip) are unwrapped transparently for the text and CSV parsers.
Requirements
- Python 3.12+
pyimporters_plugins(>=1.6.0,<1.7.0),pandas(>=2.0),structlog,openpyxl,xlrd
Installation
pip install pyimporters-csv
Usage
from pathlib import Path
from progress.bar import Bar
from pyimporters_csv.csv_parser import CSVKnowledgeParser, CSVOptionsModel
parser = CSVKnowledgeParser()
options = CSVOptionsModel(
encoding="utf-8",
identifier_col="ID",
preferredForm_col="prefLabel_en",
altForms_cols="altLabel_en",
multivalue_separator="|",
)
terms = list(parser.parse(Path("terms.csv"), options.model_dump(), Bar("Processing")))
Options
TXTOptions (text parser):
| Option | Default | Description |
|---|---|---|
encoding |
utf-8 |
Encoding of the file |
CSVOptions extends TXTOptions:
| Option | Default | Description |
|---|---|---|
separator |
, |
Field separator |
quotechar |
" |
Quote character |
multivalue_separator |
| |
Separator used to split multivalued columns |
header |
0 |
Row number (0-indexed) used as column names, blank if there is no header |
identifier_col |
identifier |
Name of the column used as the concept identifier |
preferredForm_col |
preferredForm |
Name of the column used as the preferred form |
altForms_cols |
altForms |
Name of the column used as alternative forms |
ExcelOptions is the same as CSVOptions without separator and quotechar.
The three *_col options take a column name, not an index: an unknown name
falls back to the default (column 0 for the identifier, the identifier column for
the preferred form, no alternative forms at all) and logs a warning. Values in
altForms_cols are split on multivalue_separator, so a single column can hold
several alternative forms.
Development
The build is driven by Task and uv,
with the shared stages coming from the python-archetype submodule:
git submodule update --init
task stages # print the pipeline stages, in order
task # run the pipeline up to (but excluding) py:publish
task -- --skip-tests # same, without the test stage
task up-to -- lint # run the pipeline up to and including one stage
task jenkins # run every stage, exactly what Jenkins runs
Individual stages:
| Task | Description |
|---|---|
task py:sync |
Install the workspace and its dependencies (uv sync) |
task py:lint |
ruff check and ruff format --check |
task py:format |
Reformat the code with ruff |
task py:test |
Run the test suite |
task py:test-marker -- <m> |
Run the tests carrying one pytest marker |
task py:sbom |
Generate a CycloneDX SBOM of the resolved environment |
task py:check-vulnerabilities |
Check for known CVEs |
task py:check-updates |
Check for dependency updates |
task py:build |
Build the wheel and sdist (uv build) |
task py:publish |
Publish the distributions (uv publish) |
uv.lock is not versioned here (the Jenkinsfile removes it before building), so
py:sync always resolves dependencies from scratch.
SBOM & vulnerability check
task py:sbom and task py:check-vulnerabilities wrap the underlying tools; to
run them by hand:
uv sync --extra sbom
uv run cyclonedx-py environment -o sbom.cdx.json --output-format json
uv run pip-audit --format json --output audit-report.json
uv run pip-audit --strict # fail on any known vulnerability
Metadata
Release files for pyimporters-csv 1.6.487
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyimporters_csv-1.6.487.tar.gz | 69.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyimporters_csv-1.6.487-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.3 kB
Release files / pyimporters_csv-1.6.487.tar.gz
| Download URL | pyimporters_csv-1.6.487.tar.gz |
|---|---|
| Size | 69.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
73be2ed065908f853e179a38d09d79b78a14d7627f0e3acb3fbe10be959e782a
|
|
BLAKE2b-256 checksum How to use checksums |
3deeabcd4fe05cdb7675340ca5b3d8e976632387a7b483954838b52c7afbfb41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pyimporters_csv-1.6.487-py3-none-any.whl
| Download URL | pyimporters_csv-1.6.487-py3-none-any.whl |
|---|---|
| Size | 7.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
878f3df57c244ed0622d5c112cf127e300a0d61e5e39be1c98ad3fdd1853ad59
|
|
BLAKE2b-256 checksum How to use checksums |
a1b790e97c0761c558704c0792a97c19feeebfa439ede5564503dd5aaeacc781
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|