week06
This commit is contained in:
1
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/INSTALLER
vendored
Normal file
1
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/INSTALLER
vendored
Normal file
@ -0,0 +1 @@
|
||||
pip
|
742
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/METADATA
vendored
Normal file
742
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/METADATA
vendored
Normal file
@ -0,0 +1,742 @@
|
||||
Metadata-Version: 2.3
|
||||
Name: prettytable
|
||||
Version: 3.12.0
|
||||
Summary: A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
|
||||
Project-URL: Changelog, https://github.com/prettytable/prettytable/releases
|
||||
Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-prettytable?utm_source=pypi-prettytable&utm_medium=pypi
|
||||
Project-URL: Homepage, https://github.com/prettytable/prettytable
|
||||
Project-URL: Source, https://github.com/prettytable/prettytable
|
||||
Author-email: Luke Maurits <luke@maurits.id.au>
|
||||
Maintainer: Hugo van Kemenade
|
||||
License-Expression: BSD-3-Clause
|
||||
License-File: LICENSE
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Programming Language :: Python :: 3 :: Only
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Programming Language :: Python :: 3.12
|
||||
Classifier: Programming Language :: Python :: 3.13
|
||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
||||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
||||
Classifier: Topic :: Text Processing
|
||||
Classifier: Typing :: Typed
|
||||
Requires-Python: >=3.9
|
||||
Requires-Dist: wcwidth
|
||||
Provides-Extra: tests
|
||||
Requires-Dist: pytest; extra == 'tests'
|
||||
Requires-Dist: pytest-cov; extra == 'tests'
|
||||
Requires-Dist: pytest-lazy-fixtures; extra == 'tests'
|
||||
Description-Content-Type: text/markdown
|
||||
|
||||
# PrettyTable
|
||||
|
||||
[](https://pypi.org/project/prettytable/)
|
||||
[](https://pypi.org/project/prettytable/)
|
||||
[](https://pypistats.org/packages/prettytable)
|
||||
[](https://github.com/prettytable/prettytable/actions)
|
||||
[](https://codecov.io/gh/prettytable/prettytable)
|
||||
[](https://github.com/psf/black)
|
||||
[](https://tidelift.com/subscription/pkg/pypi-prettytable?utm_source=pypi-prettytable&utm_medium=badge)
|
||||
|
||||
PrettyTable lets you print tables in an attractive ASCII form:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Adelaide | 1295 | 1158259 | 600.5 |
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
| Melbourne | 1566 | 3806092 | 646.9 |
|
||||
| Perth | 5386 | 1554769 | 869.4 |
|
||||
| Sydney | 2058 | 4336374 | 1214.8 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
Install via pip:
|
||||
|
||||
python -m pip install -U prettytable
|
||||
|
||||
Install latest development version:
|
||||
|
||||
python -m pip install -U git+https://github.com/prettytable/prettytable
|
||||
|
||||
Or from `requirements.txt`:
|
||||
|
||||
-e git://github.com/prettytable/prettytable.git#egg=prettytable
|
||||
|
||||
## Tutorial on how to use the PrettyTable API
|
||||
|
||||
### Getting your data into (and out of) the table
|
||||
|
||||
Let's suppose you have a shiny new PrettyTable:
|
||||
|
||||
```python
|
||||
from prettytable import PrettyTable
|
||||
table = PrettyTable()
|
||||
```
|
||||
|
||||
and you want to put some data into it. You have a few options.
|
||||
|
||||
#### Row by row
|
||||
|
||||
You can add data one row at a time. To do this you can set the field names first using
|
||||
the `field_names` attribute, and then add the rows one at a time using the `add_row`
|
||||
method:
|
||||
|
||||
```python
|
||||
table.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
|
||||
table.add_row(["Adelaide", 1295, 1158259, 600.5])
|
||||
table.add_row(["Brisbane", 5905, 1857594, 1146.4])
|
||||
table.add_row(["Darwin", 112, 120900, 1714.7])
|
||||
table.add_row(["Hobart", 1357, 205556, 619.5])
|
||||
table.add_row(["Sydney", 2058, 4336374, 1214.8])
|
||||
table.add_row(["Melbourne", 1566, 3806092, 646.9])
|
||||
table.add_row(["Perth", 5386, 1554769, 869.4])
|
||||
```
|
||||
|
||||
#### All rows at once
|
||||
|
||||
When you have a list of rows, you can add them in one go with `add_rows`:
|
||||
|
||||
```python
|
||||
table.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
|
||||
table.add_rows(
|
||||
[
|
||||
["Adelaide", 1295, 1158259, 600.5],
|
||||
["Brisbane", 5905, 1857594, 1146.4],
|
||||
["Darwin", 112, 120900, 1714.7],
|
||||
["Hobart", 1357, 205556, 619.5],
|
||||
["Sydney", 2058, 4336374, 1214.8],
|
||||
["Melbourne", 1566, 3806092, 646.9],
|
||||
["Perth", 5386, 1554769, 869.4],
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
#### Column by column
|
||||
|
||||
You can add data one column at a time as well. To do this you use the `add_column`
|
||||
method, which takes two arguments - a string which is the name for the field the column
|
||||
you are adding corresponds to, and a list or tuple which contains the column data:
|
||||
|
||||
```python
|
||||
table.add_column("City name",
|
||||
["Adelaide","Brisbane","Darwin","Hobart","Sydney","Melbourne","Perth"])
|
||||
table.add_column("Area", [1295, 5905, 112, 1357, 2058, 1566, 5386])
|
||||
table.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092,
|
||||
1554769])
|
||||
table.add_column("Annual Rainfall",[600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9,
|
||||
869.4])
|
||||
```
|
||||
|
||||
#### Mixing and matching
|
||||
|
||||
If you really want to, you can even mix and match `add_row` and `add_column` and build
|
||||
some of your table in one way and some of it in the other. Tables built this way are
|
||||
kind of confusing for other people to read, though, so don't do this unless you have a
|
||||
good reason.
|
||||
|
||||
#### Importing data from a CSV file
|
||||
|
||||
If you have your table data in a comma-separated values file (.csv), you can read this
|
||||
data into a PrettyTable like this:
|
||||
|
||||
```python
|
||||
from prettytable import from_csv
|
||||
with open("myfile.csv") as fp:
|
||||
mytable = from_csv(fp)
|
||||
```
|
||||
|
||||
#### Importing data from a database cursor
|
||||
|
||||
If you have your table data in a database which you can access using a library which
|
||||
confirms to the Python DB-API (e.g. an SQLite database accessible using the `sqlite`
|
||||
module), then you can build a PrettyTable using a cursor object, like this:
|
||||
|
||||
```python
|
||||
import sqlite3
|
||||
from prettytable import from_db_cursor
|
||||
|
||||
connection = sqlite3.connect("mydb.db")
|
||||
cursor = connection.cursor()
|
||||
cursor.execute("SELECT field1, field2, field3 FROM my_table")
|
||||
mytable = from_db_cursor(cursor)
|
||||
```
|
||||
|
||||
#### Getting data out
|
||||
|
||||
There are three ways to get data out of a PrettyTable, in increasing order of
|
||||
completeness:
|
||||
|
||||
- The `del_row` method takes an integer index of a single row to delete.
|
||||
- The `del_column` method takes a field name of a single column to delete.
|
||||
- The `clear_rows` method takes no arguments and deletes all the rows in the table - but
|
||||
keeps the field names as they were so you that you can repopulate it with the same
|
||||
kind of data.
|
||||
- The `clear` method takes no arguments and deletes all rows and all field names. It's
|
||||
not quite the same as creating a fresh table instance, though - style related
|
||||
settings, discussed later, are maintained.
|
||||
|
||||
### Displaying your table in ASCII form
|
||||
|
||||
PrettyTable's main goal is to let you print tables in an attractive ASCII form, like
|
||||
this:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Adelaide | 1295 | 1158259 | 600.5 |
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
| Melbourne | 1566 | 3806092 | 646.9 |
|
||||
| Perth | 5386 | 1554769 | 869.4 |
|
||||
| Sydney | 2058 | 4336374 | 1214.8 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
You can print tables like this to `stdout` or get string representations of them.
|
||||
|
||||
#### Printing
|
||||
|
||||
To print a table in ASCII form, you can just do this:
|
||||
|
||||
```python
|
||||
print(table)
|
||||
```
|
||||
|
||||
The old `table.printt()` method from versions 0.5 and earlier has been removed.
|
||||
|
||||
To pass options changing the look of the table, use the `get_string()` method documented
|
||||
below:
|
||||
|
||||
```python
|
||||
print(table.get_string())
|
||||
```
|
||||
|
||||
#### Stringing
|
||||
|
||||
If you don't want to actually print your table in ASCII form but just get a string
|
||||
containing what _would_ be printed if you use `print(table)`, you can use the
|
||||
`get_string` method:
|
||||
|
||||
```python
|
||||
mystring = table.get_string()
|
||||
```
|
||||
|
||||
This string is guaranteed to look exactly the same as what would be printed by doing
|
||||
`print(table)`. You can now do all the usual things you can do with a string, like write
|
||||
your table to a file or insert it into a GUI.
|
||||
|
||||
The table can be displayed in several different formats using `get_formatted_string` by
|
||||
changing the `out_format=<text|html|json|csv|latex>`. This function passes through
|
||||
arguments to the functions that render the table, so additional arguments can be given.
|
||||
This provides a way to let a user choose the output formatting.
|
||||
|
||||
```python
|
||||
def my_cli_function(table_format: str = 'text'):
|
||||
...
|
||||
print(table.get_formatted_string(table_format))
|
||||
```
|
||||
|
||||
#### Controlling which data gets displayed
|
||||
|
||||
If you like, you can restrict the output of `print(table)` or `table.get_string` to only
|
||||
the fields or rows you like.
|
||||
|
||||
The `fields` argument to these methods takes a list of field names to be printed:
|
||||
|
||||
```python
|
||||
print(table.get_string(fields=["City name", "Population"]))
|
||||
```
|
||||
|
||||
gives:
|
||||
|
||||
```
|
||||
+-----------+------------+
|
||||
| City name | Population |
|
||||
+-----------+------------+
|
||||
| Adelaide | 1158259 |
|
||||
| Brisbane | 1857594 |
|
||||
| Darwin | 120900 |
|
||||
| Hobart | 205556 |
|
||||
| Melbourne | 3806092 |
|
||||
| Perth | 1554769 |
|
||||
| Sydney | 4336374 |
|
||||
+-----------+------------+
|
||||
```
|
||||
|
||||
The `start` and `end` arguments take the index of the first and last row to print
|
||||
respectively. Note that the indexing works like Python list slicing - to print the 2nd,
|
||||
3rd and 4th rows of the table, set `start` to 1 (the first row is row 0, so the second
|
||||
is row 1) and set `end` to 4 (the index of the 4th row, plus 1):
|
||||
|
||||
```python
|
||||
print(table.get_string(start=1, end=4))
|
||||
```
|
||||
|
||||
prints:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
#### Changing the alignment of columns
|
||||
|
||||
By default, all columns in a table are centre aligned.
|
||||
|
||||
##### All columns at once
|
||||
|
||||
You can change the alignment of all the columns in a table at once by assigning a one
|
||||
character string to the `align` attribute. The allowed strings are `"l"`, `"r"` and
|
||||
`"c"` for left, right and centre alignment, respectively:
|
||||
|
||||
```python
|
||||
table.align = "r"
|
||||
print(table)
|
||||
```
|
||||
|
||||
gives:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Adelaide | 1295 | 1158259 | 600.5 |
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
| Melbourne | 1566 | 3806092 | 646.9 |
|
||||
| Perth | 5386 | 1554769 | 869.4 |
|
||||
| Sydney | 2058 | 4336374 | 1214.8 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
##### One column at a time
|
||||
|
||||
You can also change the alignment of individual columns based on the corresponding field
|
||||
name by treating the `align` attribute as if it were a dictionary.
|
||||
|
||||
```python
|
||||
table.align["City name"] = "l"
|
||||
table.align["Area"] = "c"
|
||||
table.align["Population"] = "r"
|
||||
table.align["Annual Rainfall"] = "c"
|
||||
print(table)
|
||||
```
|
||||
|
||||
gives:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Adelaide | 1295 | 1158259 | 600.5 |
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
| Melbourne | 1566 | 3806092 | 646.9 |
|
||||
| Perth | 5386 | 1554769 | 869.4 |
|
||||
| Sydney | 2058 | 4336374 | 1214.8 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
##### Sorting your table by a field
|
||||
|
||||
You can make sure that your ASCII tables are produced with the data sorted by one
|
||||
particular field by giving `get_string` a `sortby` keyword argument, which must be a
|
||||
string containing the name of one field.
|
||||
|
||||
For example, to print the example table we built earlier of Australian capital city
|
||||
data, so that the most populated city comes last, we can do this:
|
||||
|
||||
```python
|
||||
print(table.get_string(sortby="Population"))
|
||||
```
|
||||
|
||||
to get:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
| Adelaide | 1295 | 1158259 | 600.5 |
|
||||
| Perth | 5386 | 1554769 | 869.4 |
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Melbourne | 1566 | 3806092 | 646.9 |
|
||||
| Sydney | 2058 | 4336374 | 1214.8 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
If we want the most populated city to come _first_, we can also give a
|
||||
`reversesort=True` argument.
|
||||
|
||||
If you _always_ want your tables to be sorted in a certain way, you can make the setting
|
||||
long-term like this:
|
||||
|
||||
```python
|
||||
table.sortby = "Population"
|
||||
print(table)
|
||||
print(table)
|
||||
print(table)
|
||||
```
|
||||
|
||||
All three tables printed by this code will be sorted by population (you could do
|
||||
`table.reversesort = True` as well, if you wanted). The behaviour will persist until you
|
||||
turn it off:
|
||||
|
||||
```python
|
||||
table.sortby = None
|
||||
```
|
||||
|
||||
If you want to specify a custom sorting function, you can use the `sort_key` keyword
|
||||
argument. Pass this a function which accepts two lists of values and returns a negative
|
||||
or positive value depending on whether the first list should appear before or after the
|
||||
second one. If your table has n columns, each list will have n+1 elements. Each list
|
||||
corresponds to one row of the table. The first element will be whatever data is in the
|
||||
relevant row, in the column specified by the `sort_by` argument. The remaining n
|
||||
elements are the data in each of the table's columns, in order, including a repeated
|
||||
instance of the data in the `sort_by` column.
|
||||
|
||||
#### Adding sections to a table
|
||||
|
||||
You can divide your table into different sections using the `divider` argument. This
|
||||
will add a dividing line into the table under the row who has this field set. So we can
|
||||
set up a table like this:
|
||||
|
||||
```python
|
||||
table = PrettyTable()
|
||||
table.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
|
||||
table.add_row(["Adelaide", 1295, 1158259, 600.5])
|
||||
table.add_row(["Brisbane", 5905, 1857594, 1146.4])
|
||||
table.add_row(["Darwin", 112, 120900, 1714.7])
|
||||
table.add_row(["Hobart", 1357, 205556, 619.5], divider=True)
|
||||
table.add_row(["Melbourne", 1566, 3806092, 646.9])
|
||||
table.add_row(["Perth", 5386, 1554769, 869.4])
|
||||
table.add_row(["Sydney", 2058, 4336374, 1214.8])
|
||||
```
|
||||
|
||||
to get a table like this:
|
||||
|
||||
```
|
||||
+-----------+------+------------+-----------------+
|
||||
| City name | Area | Population | Annual Rainfall |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Adelaide | 1295 | 1158259 | 600.5 |
|
||||
| Brisbane | 5905 | 1857594 | 1146.4 |
|
||||
| Darwin | 112 | 120900 | 1714.7 |
|
||||
| Hobart | 1357 | 205556 | 619.5 |
|
||||
+-----------+------+------------+-----------------+
|
||||
| Melbourne | 1566 | 3806092 | 646.9 |
|
||||
| Perth | 5386 | 1554769 | 869.4 |
|
||||
| Sydney | 2058 | 4336374 | 1214.8 |
|
||||
+-----------+------+------------+-----------------+
|
||||
```
|
||||
|
||||
Any added dividers will be removed if a table is sorted.
|
||||
|
||||
### Changing the appearance of your table - the easy way
|
||||
|
||||
By default, PrettyTable produces ASCII tables that look like the ones used in SQL
|
||||
database shells. But it can print them in a variety of other formats as well. If the
|
||||
format you want to use is common, PrettyTable makes this easy for you to do using the
|
||||
`set_style` method. If you want to produce an uncommon table, you'll have to do things
|
||||
slightly harder (see later).
|
||||
|
||||
#### Setting a table style
|
||||
|
||||
You can set the style for your table using the `set_style` method before any calls to
|
||||
`print` or `get_string`. Here's how to print a table in Markdown format:
|
||||
|
||||
```python
|
||||
from prettytable import MARKDOWN
|
||||
table.set_style(MARKDOWN)
|
||||
print(table)
|
||||
```
|
||||
|
||||
In addition to `MARKDOWN` you can use these in-built styles:
|
||||
|
||||
- `DEFAULT` - The default look, used to undo any style changes you may have made
|
||||
- `PLAIN_COLUMNS` - A borderless style that works well with command line programs for
|
||||
columnar data
|
||||
- `MSWORD_FRIENDLY` - A format which works nicely with Microsoft Word's "Convert to
|
||||
table" feature
|
||||
- `ORGMODE` - A table style that fits [Org mode](https://orgmode.org/) syntax
|
||||
- `SINGLE_BORDER` and `DOUBLE_BORDER` - Styles that use continuous single/double border
|
||||
lines with Box drawing characters for a fancier display on terminal
|
||||
|
||||
Other styles are likely to appear in future releases.
|
||||
|
||||
### Changing the appearance of your table - the hard way
|
||||
|
||||
If you want to display your table in a style other than one of the in-built styles
|
||||
listed above, you'll have to set things up the hard way.
|
||||
|
||||
Don't worry, it's not really that hard!
|
||||
|
||||
#### Style options
|
||||
|
||||
PrettyTable has a number of style options which control various aspects of how tables
|
||||
are displayed. You have the freedom to set each of these options individually to
|
||||
whatever you prefer. The `set_style` method just does this automatically for you.
|
||||
|
||||
The options are:
|
||||
|
||||
| Option | Details |
|
||||
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `border` | A Boolean option (must be `True` or `False`). Controls whether a border is drawn inside and around the table. |
|
||||
| `preserve_internal_border` | A Boolean option (must be `True` or `False`). Controls whether borders are still drawn within the table even when `border=False`. |
|
||||
| `header` | A Boolean option (must be `True` or `False`). Controls whether the first row of the table is a header showing the names of all the fields. |
|
||||
| `hrules` | Controls printing of horizontal rules after rows. Allowed values: `FRAME`, `HEADER`, `ALL`, `NONE`. |
|
||||
| `HEADER`, `ALL`, `NONE` | These are variables defined inside the `prettytable` module so make sure you import them or use `prettytable.FRAME` etc. |
|
||||
| `vrules` | Controls printing of vertical rules between columns. Allowed values: `FRAME`, `ALL`, `NONE`. |
|
||||
| `int_format` | A string which controls the way integer data is printed. This works like: `print("%<int_format>d" % data)`. |
|
||||
| `float_format` | A string which controls the way floating point data is printed. This works like: `print("%<float_format>f" % data)`. |
|
||||
| `custom_format` | A dictionary of field and callable. This allows you to set any format you want `pf.custom_format["my_col_int"] = lambda f, v: f"{v:,}"`. The type of the callable is `Callable[[str, Any], str]` |
|
||||
| `padding_width` | Number of spaces on either side of column data (only used if left and right paddings are `None`). |
|
||||
| `left_padding_width` | Number of spaces on left-hand side of column data. |
|
||||
| `right_padding_width` | Number of spaces on right-hand side of column data. |
|
||||
| `vertical_char` | Single character string used to draw vertical lines. Default: `\|`. |
|
||||
| `horizontal_char` | Single character string used to draw horizontal lines. Default: `-`. |
|
||||
| `_horizontal_align_char` | Single character string used to indicate column alignment in horizontal lines. Default: `:` for Markdown, otherwise `None`. |
|
||||
| `junction_char` | Single character string used to draw line junctions. Default: `+`. |
|
||||
| `top_junction_char` | Single character string used to draw top line junctions. Default: `junction_char`. |
|
||||
| `bottom_junction_char` | single character string used to draw bottom line junctions. Default: `junction_char`. |
|
||||
| `right_junction_char` | Single character string used to draw right line junctions. Default: `junction_char`. |
|
||||
| `left_junction_char` | Single character string used to draw left line junctions. Default: `junction_char`. |
|
||||
| `top_right_junction_char` | Single character string used to draw top-right line junctions. Default: `junction_char`. |
|
||||
| `top_left_junction_char` | Single character string used to draw top-left line junctions. Default: `junction_char`. |
|
||||
| `bottom_right_junction_char` | Single character string used to draw bottom-right line junctions. Default: `junction_char`. |
|
||||
| `bottom_left_junction_char` | Single character string used to draw bottom-left line junctions. Default: `junction_char`. |
|
||||
|
||||
You can set the style options to your own settings in two ways:
|
||||
|
||||
#### Setting style options for the long term
|
||||
|
||||
If you want to print your table with a different style several times, you can set your
|
||||
option for the long term just by changing the appropriate attributes. If you never want
|
||||
your tables to have borders you can do this:
|
||||
|
||||
```python
|
||||
table.border = False
|
||||
print(table)
|
||||
print(table)
|
||||
print(table)
|
||||
```
|
||||
|
||||
Neither of the 3 tables printed by this will have borders, even if you do things like
|
||||
add extra rows in between them. The lack of borders will last until you do:
|
||||
|
||||
```python
|
||||
table.border = True
|
||||
```
|
||||
|
||||
to turn them on again. This sort of long-term setting is exactly how `set_style` works.
|
||||
`set_style` just sets a bunch of attributes to pre-set values for you.
|
||||
|
||||
Note that if you know what style options you want at the moment you are creating your
|
||||
table, you can specify them using keyword arguments to the constructor. For example, the
|
||||
following two code blocks are equivalent:
|
||||
|
||||
```python
|
||||
table = PrettyTable()
|
||||
table.border = False
|
||||
table.header = False
|
||||
table.padding_width = 5
|
||||
|
||||
table = PrettyTable(border=False, header=False, padding_width=5)
|
||||
```
|
||||
|
||||
#### Changing style options just once
|
||||
|
||||
If you don't want to make long-term style changes by changing an attribute like in the
|
||||
previous section, you can make changes that last for just one `get_string` by giving
|
||||
those methods keyword arguments. To print two "normal" tables with one borderless table
|
||||
between them, you could do this:
|
||||
|
||||
```python
|
||||
print(table)
|
||||
print(table.get_string(border=False))
|
||||
print(table)
|
||||
```
|
||||
|
||||
### Changing the appearance of your table - with _colors_!
|
||||
|
||||
PrettyTable has the functionality of printing your table with ANSI color codes. This
|
||||
includes support for most Windows versions through
|
||||
[Colorama](https://pypi.org/project/colorama/). To get started, import the `ColorTable`
|
||||
class instead of `PrettyTable`.
|
||||
|
||||
```diff
|
||||
-from prettytable import PrettyTable
|
||||
+from prettytable.colortable import ColorTable
|
||||
```
|
||||
|
||||
The `ColorTable` class can be used the same as `PrettyTable`, but it adds an extra
|
||||
property. You can now specify a custom _theme_ that will format your table with colors.
|
||||
|
||||
```python
|
||||
from prettytable.colortable import ColorTable, Themes
|
||||
|
||||
table = ColorTable(theme=Themes.OCEAN)
|
||||
|
||||
print(table)
|
||||
```
|
||||
|
||||
#### Creating a custom theme
|
||||
|
||||
The `Theme` class allows you to customize both the characters and colors used in your
|
||||
table.
|
||||
|
||||
| Argument | Description |
|
||||
| ---------------------------------------------------------- | --------------------------------------------------------- |
|
||||
| `default_color` | The color to use as default |
|
||||
| `vertical_char`, `horizontal_char`, and `junction_char` | The characters used for creating the outline of the table |
|
||||
| `vertical_color`, `horizontal_color`, and `junction_color` | The colors used to style each character. |
|
||||
|
||||
> **Note:** Colors are formatted with the `Theme.format_code(s: str)` function. It
|
||||
> accepts a string. If the string starts with an escape code (like `\x1b`) then it will
|
||||
> return the given string. If the string is just whitespace, it will return `""`. If the
|
||||
> string is a number (like `"34"`), it will automatically format it into an escape code.
|
||||
> I recommend you look into the source code for more information.
|
||||
|
||||
### Displaying your table in JSON
|
||||
|
||||
PrettyTable will also print your tables in JSON, as a list of fields and an array of
|
||||
rows. Just like in ASCII form, you can actually get a string representation - just use
|
||||
`get_json_string()`.
|
||||
|
||||
### Displaying your table in HTML form
|
||||
|
||||
PrettyTable will also print your tables in HTML form, as `<table>`s. Just like in ASCII
|
||||
form, you can actually get a string representation - just use `get_html_string()`. HTML
|
||||
printing supports the `fields`, `start`, `end`, `sortby` and `reversesort` arguments in
|
||||
exactly the same way as ASCII printing.
|
||||
|
||||
#### Styling HTML tables
|
||||
|
||||
By default, PrettyTable outputs HTML for "vanilla" tables. The HTML code is quite
|
||||
simple. It looks like this:
|
||||
|
||||
```html
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>City name</th>
|
||||
<th>Area</th>
|
||||
<th>Population</th>
|
||||
<th>Annual Rainfall</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Adelaide</td>
|
||||
<td>1295</td>
|
||||
<td>1158259</td>
|
||||
<td>600.5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brisbane</td>
|
||||
<td>5905</td>
|
||||
<td>1857594</td>
|
||||
<td>1146.4</td>
|
||||
...
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
```
|
||||
|
||||
If you like, you can ask PrettyTable to do its best to mimic the style options that your
|
||||
table has set using inline CSS. This is done by giving a `format=True` keyword argument
|
||||
to `get_html_string` method. Note that if you _always_ want to print formatted HTML you
|
||||
can do:
|
||||
|
||||
```python
|
||||
table.format = True
|
||||
```
|
||||
|
||||
and the setting will persist until you turn it off.
|
||||
|
||||
Just like with ASCII tables, if you want to change the table's style for just one
|
||||
`get_html_string` you can pass those methods' keyword arguments - exactly like `print`
|
||||
and `get_string`.
|
||||
|
||||
#### Setting HTML attributes
|
||||
|
||||
You can provide a dictionary of HTML attribute name/value pairs to the `get_html_string`
|
||||
method using the `attributes` keyword argument. This lets you specify common HTML
|
||||
attributes like `id` and `class` that can be used for linking to your tables or
|
||||
customising their appearance using CSS. For example:
|
||||
|
||||
```python
|
||||
print(table.get_html_string(attributes={"id":"my_table", "class":"red_table"}))
|
||||
```
|
||||
|
||||
will print:
|
||||
|
||||
```html
|
||||
<table id="my_table" class="red_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>City name</th>
|
||||
<th>Area</th>
|
||||
<th>Population</th>
|
||||
<th>Annual Rainfall</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
... ... ...
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
```
|
||||
|
||||
#### Setting HTML escaping
|
||||
|
||||
By default, PrettyTable will escape the data contained in the header and data fields
|
||||
when sending output to HTML. This can be disabled by setting the `escape_header` and
|
||||
`escape_data` to false. For example:
|
||||
|
||||
```python
|
||||
print(table.get_html_string(escape_header=False, escape_data=False))
|
||||
```
|
||||
|
||||
### Miscellaneous things
|
||||
|
||||
#### Copying a table
|
||||
|
||||
You can call the `copy` method on a PrettyTable object without arguments to return an
|
||||
identical independent copy of the table.
|
||||
|
||||
If you want a copy of a PrettyTable object with just a subset of the rows, you can use
|
||||
list slicing notation:
|
||||
|
||||
```python
|
||||
new_table = old_table[0:5]
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
After editing files, use the [Black](https://github.com/psf/black) linter to auto-format
|
||||
changed lines.
|
||||
|
||||
```sh
|
||||
python -m pip install black
|
||||
black prettytable*.py
|
||||
```
|
15
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/RECORD
vendored
Normal file
15
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/RECORD
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
prettytable-3.12.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
prettytable-3.12.0.dist-info/METADATA,sha256=Y4XGlGKSIAlWVfWBTfz_5dsGmlhBFNLGlx0_344-sa8,30632
|
||||
prettytable-3.12.0.dist-info/RECORD,,
|
||||
prettytable-3.12.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
prettytable-3.12.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
||||
prettytable-3.12.0.dist-info/licenses/LICENSE,sha256=DIrcwgTIr2zf33iH39H5nCmQH2wdUFp4u6lu-k-yywU,1612
|
||||
prettytable/__init__.py,sha256=wNTmm4y04rBGf2lKsRydjVzmkEBrtodzoKf9AeAx74g,1184
|
||||
prettytable/__pycache__/__init__.cpython-312.pyc,,
|
||||
prettytable/__pycache__/_version.cpython-312.pyc,,
|
||||
prettytable/__pycache__/colortable.cpython-312.pyc,,
|
||||
prettytable/__pycache__/prettytable.cpython-312.pyc,,
|
||||
prettytable/_version.py,sha256=6iU97ZNjFyWo5y612HWPvq4RAAHGjmzNdNrNPdD1CeM,413
|
||||
prettytable/colortable.py,sha256=iBoxuCiLw-__4GgwO4mEQuPxnMMOn6UI29lSone3BoE,3589
|
||||
prettytable/prettytable.py,sha256=t4ZpM5gKtzV_kymrjNFjARdHUQVI6xEXx7vzBISB_p8,102895
|
||||
prettytable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
0
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/REQUESTED
vendored
Normal file
0
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/REQUESTED
vendored
Normal file
4
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/WHEEL
vendored
Normal file
4
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/WHEEL
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: hatchling 1.25.0
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
30
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/licenses/LICENSE
vendored
Normal file
30
env/lib/python3.12/site-packages/prettytable-3.12.0.dist-info/licenses/LICENSE
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
# Copyright (c) 2009-2014 Luke Maurits <luke@maurits.id.au>
|
||||
# All rights reserved.
|
||||
# With contributions from:
|
||||
# * Chris Clark
|
||||
# * Klein Stephane
|
||||
# * John Filleau
|
||||
# * Vladimir Vrzić
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
# * The name of the author may not be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
Reference in New Issue
Block a user