Skip to main content

Human Readable

Project description

Human Readable

PyPI Status Python Version License

Read the documentation at https://human-readable.readthedocs.io/ Tests Codecov

pre-commit Black

Features

  • File size humanization.

  • List humanization.

  • Numbers humanization.

  • Time and dates humanization.

  • Internacionalization (i18n) to 20+ locales:

    • Abbreviated English (en_ABBR)
    • Brazilian Portuguese (pt_BR)
    • Dutch (nl_NL)
    • Finnish (fi_FI)
    • French (fr_FR)
    • German (de_DE)
    • Indonesian (id_ID)
    • Italian (it_IT)
    • Japanese (ja_JP)
    • Korean (ko_KR)
    • Persian (fa_IR)
    • Polish (pl_PL)
    • Portugal Portuguese (pt_PT)
    • Russian (ru_RU)
    • Simplified Chinese (zh_CN)
    • Slovak (sk_SK)
    • Spanish (es_ES)
    • Taiwan Chinese (zh_TW)
    • Turkish (tr_TR)
    • Ukrainian (uk_UA)
    • Vietnamese (vi_VI)

Requirements

  • It works in Python 3.9+.

Installation

You can install Human Readable via pip from PyPI:

$ pip install human-readable

Basic usage

Import the lib with:

import human_readable

Date and time humanization examples:

human_readable.time_of_day(17)
"afternoon"

import datetime as dt
human_readable.timing(dt.time(6, 59, 0))
"one minute to seven hours"

human_readable.timing(dt.time(21, 0, 40), formal=False)
"nine in the evening"

human_readable.time_delta(dt.timedelta(days=65))
"2 months"

human_readable.date_time(dt.datetime.now() - dt.timedelta(minutes=2))
"2 minutes ago"

human_readable.day(dt.date.today() - dt.timedelta(days=1))
"yesterday"

human_readable.date(dt.date(2019, 7, 2))
"Jul 02 2019"

human_readable.year(dt.date.today() + dt.timedelta(days=365))
"next year"

Precise time delta examples:

import datetime as dt
delta = dt.timedelta(seconds=3633, days=2, microseconds=123000)
human_readable.precise_delta(delta)
"2 days, 1 hour and 33.12 seconds"

human_readable.precise_delta(delta, minimum_unit="microseconds")
"2 days, 1 hour, 33 seconds and 123 milliseconds"

human_readable.precise_delta(delta, suppress=["days"], format="0.4f")
"49 hours and 33.1230 seconds"

File size humanization examples:

human_readable.file_size(1000000)
"1.0 MB"

human_readable.file_size(1000000, binary=True)
"976.6 KiB"

human_readable.file_size(1000000, gnu=True)
"976.6K"

Lists humanization examples:

human_readable.listing(["Alpha", "Bravo"], ",")
"Alpha, Bravo"

human_readable.listing(["Alpha", "Bravo", "Charlie"], ";", "or")
"Alpha; Bravo or Charlie"

Numbers humanization examples:

human_readable.int_comma(12345)
"12,345"

human_readable.int_word(123455913)
"123.5 million"

human_readable.int_word(12345591313)
"12.3 billion"

human_readable.ap_number(4)
"four"

human_readable.ap_number(41)
"41"

Floating point number humanization examples:

human_readable.fractional(1.5)
"1 1/2"

human_readable.fractional(0.3)
"3/10"

Scientific notation examples:

human_readable.scientific_notation(1000)
"1.00 x 10³"

human_readable.scientific_notation(5781651000, precision=4)
"5.7817 x 10⁹"

Complete instructions can be found at human-readable.readthedocs.io.

Localization

How to change locale at runtime:

import datetime as dt
human_readable.date_time(dt.timedelta(seconds=3))
'3 seconds ago'

_t = human_readable.i18n.activate("ru_RU")
human_readable.date_time(dt.timedelta(seconds=3))
'3 секунды назад'

human_readable.i18n.deactivate()
human_readable.date_time(dt.timedelta(seconds=3))
'3 seconds ago'

You can pass additional parameter path to activate to specify a path to search locales in.

human_readable.i18n.activate("xx_XX")
...
FileNotFoundError: [Errno 2] No translation file found for domain: 'human_readable'
human_readable.i18n.activate("pt_BR", path="path/to/my/portuguese/translation/")
<gettext.GNUTranslations instance ...>

You can see how to add a new locale on the Contributor Guide.

A special locale, en_ABBR, renderes abbreviated versions of output:

human_readable.date_time(datetime.timedelta(seconds=3))
3 seconds ago

human_readable.int_word(12345591313)
12.3 billion

human_readable.date_time(datetime.timedelta(seconds=86400*476))
1 year, 3 months ago

human_readable.i18n.activate('en_ABBR')
human_readable.date_time(datetime.timedelta(seconds=3))
3s

human_readable.int_word(12345591313)
12.3 B

human_readable.date_time(datetime.timedelta(seconds=86400*476))
1y 3M

Contributing

Contributions are very welcome. To learn more, see the Contributor Guide.

License

Distributed under the terms of the MIT license, Human Readable is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Credits

This lib is based on original humanize with some added features such as listing, improved naming, documentation, functional tests, type-annotations, bug fixes and better localization.

This project was generated from @cjolowicz's Hypermodern Python Cookiecutter template.

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

human_readable-2.0.1.tar.gz (113.6 kB view details)

Uploaded Source

Built Distribution

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

human_readable-2.0.1-py3-none-any.whl (120.2 kB view details)

Uploaded Python 3

File details

Details for the file human_readable-2.0.1.tar.gz.

File metadata

  • Download URL: human_readable-2.0.1.tar.gz
  • Upload date:
  • Size: 113.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for human_readable-2.0.1.tar.gz
Algorithm Hash digest
SHA256 ec8932e77b8196fbd0f9440b23c80ffa0964ea76ff965836f604f41ee48b594f
MD5 53ba64e930b38172da1d7b6acb363b15
BLAKE2b-256 57c660f903926f22259665ab698ea852ce3e251f2cc347c7159813d2e292b958

See more details on using hashes here.

File details

Details for the file human_readable-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: human_readable-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 120.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for human_readable-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1fa62023bad866c456bccf9cfd8cfb5ab335d5a7a947341386bb33412916390d
MD5 35c5e02dea7e4f8accef807ab30546b2
BLAKE2b-256 ff2b28c6ec07a7bdd3f47ac06eef59dbf8a2b91e6bda2e9647745f7f322b3726

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