A shell columnizer
Project description
shcol is a shell columnizer that works in a similar way as the Unix-tool ls does when rendering directory contents.
Some examples:
>>> import shcol >>> shcol.print_filenames() # print contents of current directory bin LICENSE MANIFEST.in setup.py testsuite build Makefile README.md shcol >>> shcol.print_filenames('testsuite') # print contents of a subdirectory test_cli.py test_core.py test_highlevel.py test_script.py test_cli.pyc test_core.pyc test_highlevel.pyc test_script.pyc >>> shcol.print_filenames('testsuite/*.py') # only print `*.py`-files testsuite/test_cli.py testsuite/test_highlevel.py testsuite/test_core.py testsuite/test_script.py >>> shcol.print_filenames('~/shcol', hide_dotted=False) # like `ls -A ~/shcol` bin .git Makefile README.md shcol build LICENSE MANIFEST.in setup.py testsuite
shcol can also columnize the attribute names of a Python-object:
>>> shcol.print_attr_names(shcol) __author__ config helpers __package__ print_columnized_mapping __builtins__ core highlevel __path__ print_filenames cli __doc__ __license__ print_attrs __version__ columnize __file__ __name__ print_columnized >>> shcol.print_attr_names(shcol, spacing=5) __author__ core __license__ print_columnized __builtins__ __doc__ __name__ print_columnized_mapping cli __file__ __package__ print_filenames columnize helpers __path__ __version__ config highlevel print_attrs
Note that the spacing-parameter as shown above works with all kinds of print_*-functions in shcol.
You can also tell a print_*-function to use a specific line width for its output:
>>> shcol.print_attr_names(shcol, spacing=5, line_width=60) __author__ __file__ print_attrs __builtins__ helpers print_columnized cli highlevel print_columnized_mapping columnize __license__ print_filenames config __name__ __version__ core __package__ __doc__ __path__
Note that by default the terminal’s width is used as the line width.
And of course, you can columnize arbitrary names with shcol:
>>> shcol.print_columnized(['foo', 'bar', 'baz'], spacing=7) foo bar baz >>> shcol.print_columnized(['foo', 'bar', 'baz'], spacing=7, sort_items=True) bar baz foo
The following example demonstrates that sorting is locale-aware. Note the German umlaut in it. Hint: You need German as your default locale setting to reproduce that in your Python interpreter:
>>> shcol.print_columnized(['foo', 'bär', 'baz'], sort_items=True) bär baz foo
You can see that shcol handles Unicode-characters as you would expect it.
In case you need the raw columnized string you can get that directly:
>>> shcol.columnize(['foo', 'bär', 'baz'], sort_items=True) # on Python 2.7 u'b\xe4r baz foo' >>> shcol.columnize(['foo', 'bär', 'baz'], sort_items=True) # on Python 3.x 'bär baz foo'
shcol has its focus on usability and speed. Even large lists will be rendered relatively fast (like shcol.print_filenames('/usr/bin')).
Just give it a try if you like it and feel free to give some feedback. :-)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file shcol-0.2-rc1.tar.gz
.
File metadata
- Download URL: shcol-0.2-rc1.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32b5e25555670905bc387e814a96ad635d6a5adeaef8ba26290318ea7dd17d91 |
|
MD5 | 276b49b2380301ed8f5f01088d34b46a |
|
BLAKE2b-256 | 957528bb584db246aaf1269b3c95625fd2da8cc89918ab48d48db3d28b6cd19b |