humanfriendly 10.0


pip install humanfriendly

  Latest version

Released: Sep 17, 2021

Project Links

Meta
Author: Peter Odding
Requires Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*

Classifiers

Development Status
  • 6 - Mature

Environment
  • Console

Framework
  • Sphinx :: Extension

Intended Audience
  • Developers
  • System Administrators

License
  • OSI Approved :: MIT License

Natural Language
  • English

Programming Language
  • Python
  • Python :: 2
  • Python :: 2.7
  • Python :: 3
  • Python :: 3.5
  • Python :: 3.6
  • Python :: 3.7
  • Python :: 3.8
  • Python :: 3.9
  • Python :: Implementation :: CPython
  • Python :: Implementation :: PyPy

Topic
  • Communications
  • Scientific/Engineering :: Human Machine Interfaces
  • Software Development
  • Software Development :: Libraries :: Python Modules
  • Software Development :: User Interfaces
  • System :: Shells
  • System :: System Shells
  • System :: Systems Administration
  • Terminals
  • Text Processing :: General
  • Text Processing :: Linguistic
  • Utilities
https://github.com/xolox/python-humanfriendly/actions/workflows/test.yml/badge.svg?branch=master https://codecov.io/gh/xolox/python-humanfriendly/branch/master/graph/badge.svg?token=jYaj4T74TU

The functions and classes in the humanfriendly package can be used to make text interfaces more user friendly. Some example features:

  • Parsing and formatting numbers, file sizes, pathnames and timespans in simple, human friendly formats.

  • Easy to use timers for long running operations, with human friendly formatting of the resulting timespans.

  • Prompting the user to select a choice from a list of options by typing the option’s number or a unique substring of the option.

  • Terminal interaction including text styling (ANSI escape sequences), user friendly rendering of usage messages and querying the terminal for its size.

The humanfriendly package is currently tested on Python 2.7, 3.5+ and PyPy (2.7) on Linux and macOS. While the intention is to support Windows as well, you may encounter some rough edges.

Getting started

It’s very simple to start using the humanfriendly package:

>>> from humanfriendly import format_size, parse_size
>>> from humanfriendly.prompts import prompt_for_input
>>> user_input = prompt_for_input("Enter a readable file size: ")

  Enter a readable file size: 16G

>>> num_bytes = parse_size(user_input)
>>> print(num_bytes)
16000000000
>>> print("You entered:", format_size(num_bytes))
You entered: 16 GB
>>> print("You entered:", format_size(num_bytes, binary=True))
You entered: 14.9 GiB

To get a demonstration of supported terminal text styles (based on ANSI escape sequences) you can run the following command:

$ humanfriendly --demo

Command line

Usage: humanfriendly [OPTIONS]

Human friendly input/output (text formatting) on the command line based on the Python package with the same name.

Supported options:

Option

Description

-c, --run-command

Execute an external command (given as the positional arguments) and render a spinner and timer while the command is running. The exit status of the command is propagated.

--format-table

Read tabular data from standard input (each line is a row and each whitespace separated field is a column), format the data as a table and print the resulting table to standard output. See also the --delimiter option.

-d, --delimiter=VALUE

Change the delimiter used by --format-table to VALUE (a string). By default all whitespace is treated as a delimiter.

-l, --format-length=LENGTH

Convert a length count (given as the integer or float LENGTH) into a human readable string and print that string to standard output.

-n, --format-number=VALUE

Format a number (given as the integer or floating point number VALUE) with thousands separators and two decimal places (if needed) and print the formatted number to standard output.

-s, --format-size=BYTES

Convert a byte count (given as the integer BYTES) into a human readable string and print that string to standard output.

-b, --binary

Change the output of -s, --format-size to use binary multiples of bytes (base-2) instead of the default decimal multiples of bytes (base-10).

-t, --format-timespan=SECONDS

Convert a number of seconds (given as the floating point number SECONDS) into a human readable timespan and print that string to standard output.

--parse-length=VALUE

Parse a human readable length (given as the string VALUE) and print the number of metres to standard output.

--parse-size=VALUE

Parse a human readable data size (given as the string VALUE) and print the number of bytes to standard output.

--demo

Demonstrate changing the style and color of the terminal font using ANSI escape sequences.

-h, --help

Show this message and exit.

A note about size units

When I originally published the humanfriendly package I went with binary multiples of bytes (powers of two). It was pointed out several times that this was a poor choice (see issue #4 and pull requests #8 and #9) and thus the new default became decimal multiples of bytes (powers of ten):

Unit

Binary value

Decimal value

KB

1024

1000

MB

1048576

1000000

GB

1073741824

1000000000

TB

1099511627776

1000000000000

etc

The option to use binary multiples of bytes remains by passing the keyword argument binary=True to the format_size() and parse_size() functions.

Windows support

Windows 10 gained native support for ANSI escape sequences which means commands like humanfriendly --demo should work out of the box (if your system is up-to-date enough). If this doesn’t work then you can install the colorama package, it will be used automatically once installed.

Contact

The latest version of humanfriendly is available on PyPI and GitHub. The documentation is hosted on Read the Docs and includes a changelog. For bug reports please create an issue on GitHub. If you have questions, suggestions, etc. feel free to send me an e-mail at peter@peterodding.com.

License

This software is licensed under the MIT license.

© 2021 Peter Odding.

10.0 Sep 17, 2021
9.2 Jun 11, 2021
9.1 Dec 10, 2020
9.0 Dec 01, 2020
8.2 Apr 19, 2020
8.1 Mar 06, 2020
8.0 Mar 02, 2020
7.3 Mar 01, 2020
7.2 Mar 01, 2020
7.1.1 Feb 18, 2020
7.1 Feb 16, 2020
7.0 Feb 16, 2020
6.1 Feb 10, 2020
6.0 Feb 09, 2020
5.0 Feb 06, 2020
4.18 Feb 21, 2019
4.17 Oct 20, 2018
4.16.1 Jul 21, 2018
4.16 Jul 21, 2018
4.15.1 Jul 14, 2018
4.15 Jul 14, 2018
4.14 Jul 13, 2018
4.13 Jul 09, 2018
4.12.1 May 10, 2018
4.12 Apr 25, 2018
4.11 Apr 25, 2018
4.10 Mar 31, 2018
4.9 Mar 28, 2018
4.8 Jan 20, 2018
4.7 Jan 14, 2018
4.6 Jan 04, 2018
4.5 Jan 04, 2018
4.4.2 Jan 04, 2018
4.4.1 Aug 07, 2017
4.4 Jul 16, 2017
4.3 Jul 10, 2017
4.2 Jul 10, 2017
4.1 Jul 10, 2017
4.0 Jul 10, 2017
3.8 Jul 02, 2017
3.7 Jul 01, 2017
3.6.1 Jun 24, 2017
3.6 Jun 24, 2017
3.5 Jun 24, 2017
3.4.1 Jun 24, 2017
3.4 Jun 24, 2017
3.3 Jun 24, 2017
3.2 May 17, 2017
3.1 May 05, 2017
3.0 May 04, 2017
2.4 Feb 13, 2017
2.3.2 Jan 16, 2017
2.3.1 Jan 16, 2017
2.3 Jan 16, 2017
2.2.1 Jan 10, 2017
2.2 Nov 29, 2016
2.1 Oct 09, 2016
2.0.1 Sep 29, 2016
2.0 Sep 29, 2016
1.44.9 Sep 28, 2016
1.44.8 Sep 28, 2016
1.44.7 Apr 21, 2016
1.44.6 Apr 21, 2016
1.44.5 Mar 20, 2016
1.44.4 Mar 15, 2016
1.44.3 Feb 20, 2016
1.44.2 Feb 20, 2016
1.44.1 Feb 18, 2016
1.43.1 Jan 19, 2016
1.43 Jan 19, 2016
1.42 Oct 22, 2015
1.41 Oct 22, 2015
1.40 Oct 22, 2015
1.38 Oct 22, 2015
1.37 Oct 22, 2015
1.36 Oct 21, 2015
1.35 Sep 10, 2015
1.33 Jul 27, 2015
1.32 Jul 19, 2015
1.31 Jun 28, 2015
1.30 Jun 28, 2015
1.29 Jun 24, 2015
1.27 Jun 03, 2015
1.26 Jun 02, 2015
1.25.1 Jun 02, 2015
1.25 May 26, 2015
1.24 May 26, 2015
1.23.1 May 26, 2015
1.23 May 25, 2015
1.22 May 25, 2015
1.21 May 25, 2015
1.20 May 25, 2015
1.19 May 23, 2015
1.17 May 23, 2015
1.16 Mar 29, 2015
1.15 Mar 17, 2015
1.14 Nov 22, 2014
1.13 Nov 16, 2014
1.11 Nov 15, 2014
1.10 Nov 15, 2014
1.9.6 Sep 14, 2014
1.9.4 Jun 29, 2014
1.9.3 Jun 29, 2014
1.9.2 Jun 29, 2014
1.9.1 Jun 23, 2014
1.9 Jun 22, 2014
1.8.6 Jun 08, 2014
1.8.4 Jun 07, 2014
1.8.3 Jun 07, 2014
1.8.2 Jun 01, 2014
1.8.1 May 10, 2014
1.8 May 10, 2014
1.7.1 Sep 22, 2013
1.7 Sep 22, 2013
1.6 Aug 11, 2013
1.5 Jul 06, 2013
1.4.2 Jun 26, 2013
1.4.1 Jun 26, 2013

Wheel compatibility matrix

Platform Python 2 Python 3
any

Files in release

Extras: None
Dependencies:
monotonic
pyreadline and
pyreadline3 and