Skip to main content

Utility for joining string lists with flexible separator formatting.

Project description

Formatted Join ✅

Effortlessly join string sequences with flexible separator formatting for clear, polished output


License: MIT PyPI PyPI Status Downloads

Installation

PyPI

pip install formatted-join

uv

uv add formatted-join

Usage Examples

formatted_join(items: Sequence[str], separator=', ', final_separator=' and ', use_penultimate_separator=True) -> str

Joins items with flexible separator configuraton.

>>> from formatted_join import formatted_join
>>> formatted_join(['Hello', 'World'])
'Hello and World'
>>> formatted_join(('A', 'B', 'C'))
'A, B, and C'
>>> formatted_join(['X', 'Y', 'Z', 'W'], separator=' | ', final_separator=' & ')
'X | Y | Z & W'
>>> formatted_join(['Solo'])
'Solo'
>>> formatted_join(['', ''])
' and '
>>> formatted_join(
...     items=['Alpha', 'Bravo', 'Charlie', 'Delta'],
...     separator=' | ',
...     final_separator=' & ',
...     use_penultimate_separator=False
... )
'Alpha | Bravo | Charlie & Delta'
>>> formatted_join(['One', 'Two'], final_separator=' ~ ')
'One ~ Two'

formatted_join_conjunction(items: Sequence[str], language: str = 'en') -> str

Joins items using a comma and localized* “and” before the last item.

>>> from formatted_join import formatted_join_conjunction
>>> formatted_join_conjunction(['Spring', 'Summer'])
'Spring and Summer'
>>> formatted_join_conjunction(['One', 'Two', 'Three'])
'One, Two, and Three'
>>> formatted_join_conjunction(['Motorcycle', 'Bus', 'Car', language='en'])
'Motorcycle, Bus, and Car'
>>> formatted_join_conjunction(['Motorcycle', 'Bus', 'Car', language='de'])
'Motorcycle, Bus und Car'

formatted_join_disjunction(items: Sequence[str], language: str = 'en') -> str

Joins items using a comma and localized* “or” before the last item.

>>> from formatted_join import formatted_join_disjunction
>>> formatted_join_disjunction(['Monday', 'Tuesday'])
'Monday or Tuesday'
>>> formatted_join_disjunction(['X', 'Y', 'Z'])
'X, Y, or Z'
>>> formatted_join_disjunction(['Motorcycle', 'Bus', 'Car', language='en'])
'Motorcycle, Bus, or Car'
>>> formatted_join_disjunction(['Motorcycle', 'Bus', 'Car', language='de'])
'Motorcycle, Bus oder Car'

formatted_join_unit(items: Sequence[str]) -> str

Joins items with commas only (no distinct final separator).

>>> from formatted_join import formatted_join_unit
>>> formatted_join_unit(['A'])
'A'
>>> formatted_join_unit(['A', 'B', 'C', 'D'])
'A, B, C, D'

formatted_join_narrow(items: Sequence[str]) -> str

Joins items with a single space separating each.

>>> from formatted_join import formatted_join_narrow
>>> formatted_join_narrow(['Only'])
'Only'
>>> formatted_join_narrow(['A', 'B', 'C'])
'A B C'
>>> formatted_join_narrow(['Line1', '-', 'Line2'])
'Line1 - Line2'

* Supported languages for formatted_join_[conjunction|disjunction]:

language and or separator has penultimate separator
en and or ', ' yes
de und oder ', ' no

Development

  • Install Dependencies:
    • uv sync && uv pip install -r pyproject.toml --extra dev
  • Run formater:
    • uv run ruff check --select I --fix && uv run ruff format
  • Run type checking:
    • uv run mypy .
  • Run unit tests:
    • uv run formatted_join_test.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

formatted_join-1.1.1.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

formatted_join-1.1.1-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file formatted_join-1.1.1.tar.gz.

File metadata

  • Download URL: formatted_join-1.1.1.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.2

File hashes

Hashes for formatted_join-1.1.1.tar.gz
Algorithm Hash digest
SHA256 6487be31d09bc8f9282e2b062843f6d9eed470fcbdd3ac55b23cf169683abcd5
MD5 23a5951560e96b9462df932099ec2d2a
BLAKE2b-256 96ef01eef5966b8fb7dc76f1ede51167b16e4686d59c852e91f086d8b9e52800

See more details on using hashes here.

File details

Details for the file formatted_join-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for formatted_join-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 72634e678a15419e9f7f9034353e492e3c06f1fcdf5ff83a0002a7ce4cbe480d
MD5 a39993bc5e891d7ae212e779773ec6e2
BLAKE2b-256 bb62422b227373c7af534a14a54c9afe49b20b734c999d2f7fef78c51b0423df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page