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.2.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.2-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: formatted_join-1.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 d191d4635976f474e94a8cb041c7d78f79edc5ad7146b56112795aee036c4c1e
MD5 7b7bce7038bfab803dec349bd55cfbe5
BLAKE2b-256 e864c55d2c2c0a606370fcd6e6059fa9645f3dee2fbefe149be4bfda72babee1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for formatted_join-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2ef38c3d71ca364be5db9024c9576f69fe69cb01975b21608e8f3f5b8b618a7b
MD5 891b914a58136e86c7a7ff27799400ad
BLAKE2b-256 066e652475af754d4f93418df310ad19212097e614d61ba0bdc054817a3ee21d

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