Skip to main content

doc on github.io

xtable

print console tables. xtable serves as both a class and a command line tool.


Installation

`pip install xtable`

run it through xtableorpython -mxtable`


below is a simple introduction for some basic usage.

use the class

from xtable import xtable

data = [
        [1,2,3,4,5],
        [11,52,3,4,5],
        [11,None,3,4,5],
        [11,None,3,None,5],
        ]
hdr = ['c1','c2','c3','c4','c5']

xt = xtable(data=data,header=hdr)
print(xt)

// result :

c1 c2 c3 c4 c5
--------------
1  2  3  4  5
11 52 3  4  5
11    3  4  5
11    3     5

# test/t2.csv
'''
h1,h2,h3
"asd","sdfsadf",1
"c","cc",233
'''

xt = xtable.init_from_csv("test/t2.csv")
print(xt)

// result :

h1  h2      h3
---------------
asd sdfsadf 1
c   cc      233

data = [
        {"h1":"v1","h2":"v2","h3":"v3"},
        {"h1":"v11","h2":"v22","h3":"v33"},
        {"h1":"v11111","h2":"v22222","h3":"v34444"},
     ]
xt = xtable.init_from_list(data)
print(xt)

// result :

h1     h2     h3
--------------------
v1     v2     v3
v11    v22    v33
v11111 v22222 v34444


// all of them support "xheader".

data = [
        {"h1":"v1","h2":"v2","h3":"v3"},
        {"h1":"v11","h2":"v22","h3":"v33"},
        {"h1":"v11111","h2":"v22222","h3":"v34444"},
     ]
xt = xtable.init_from_list(data, xheader=["h1","h3"])
print(xt)

xt2 = xtable.init_from_list(data, xheader="h2,h3")
print(xt2)

h1     h3
-------------
v1     v3
v11    v33
v11111 v34444

h2     h3
-------------
v2     v3
v22    v33
v22222 v34444

// output json/yaml/csv/html

data = [
        {"h1":"v1","h2":"v2","h3":"v3"},
        {"h1":"v11","h2":"v22","h3":"v33"},
        {"h1":"v11111","h2":"v22222","h3":"v34444"},
     ]
xt = xtable.init_from_list(data, xheader=["h1","h3"])
print(xt.csv())
print(xt.yaml())
print(xt.json())
print(xt.html())

// result

- h1: v1
  h3: v3
- h1: v11
  h3: v33
- h1: v11111
  h3: v34444

[
  {
    "h1": "v1",
    "h3": "v3"
  },
  {
    "h1": "v11",
    "h3": "v33"
  },
  {
    "h1": "v11111",
    "h3": "v34444"
  }
]
<table border=1 style="border-collapse:collapse;">
<tr>
<td><b>h1</b></td>
<td><b>h3</b></td>
</tr>
<tr>
<td>v1</td>
<td>v3</td>
</tr>
<tr>
<td>v11</td>
<td>v33</td>
</tr>
<tr>
<td>v11111</td>
<td>v34444</td>
</tr>

use the command line

[yonghang@mtp xtable]$ cat test/t1.txt  
a b c
121 1212 12
12 332  2323
[yonghang@mtp xtable]$ cat test/t1.txt  | xtable 
a   b    c
-------------
121 1212 12
12  332  2323
[yonghang@mtp xtable]$ 
[yonghang@mtp xtable]$ cat test/t2.csv 
h1,h2,h3
"asd","sdfsadf",1
"c","cc",233
[yonghang@mtp xtable]$ 
[yonghang@mtp xtable]$ cat test/t2.csv  | xtable -b","
h1    h2        h3
-------------------
"asd" "sdfsadf" 1
"c"   "cc"      233

[yonghang@mtp xtable]$ cat test/t3.json  | qic
[
  {
    "userId": 1,
    "firstName": "Krish",
    "lastName": "Lee",
    "phoneNumber": "123456",
    "emailAddress": "krish.lee@learningcontainer.com"
  },
  {
    "userId": 2,
    "firstName": "racks",
    "lastName": "jacson",
    "phoneNumber": "123456",
    "emailAddress": "racks.jacson@learningcontainer.com"
  },
  {
    "userId": 3,
    "firstName": "denial",
    "lastName": "roast",
    "phoneNumber": "33333333",
    "emailAddress": "denial.roast@learningcontainer.com"
  },
  {
    "userId": 4,
    "firstName": "devid",
    "lastName": "neo",
    "phoneNumber": "222222222",
    "emailAddress": "devid.neo@learningcontainer.com"
  },
  {
    "userId": 5,
    "firstName": "jone",
    "lastName": "mac",
    "phoneNumber": "111111111",
    "emailAddress": "jone.mac@learningcontainer.com"
  }
]

[yonghang@mtp xtable]$ cat test/t3.json  | xtable
userId firstName lastName phoneNumber emailAddress
------------------------------------------------------------------------
1      Krish     Lee      123456      krish.lee@learningcontainer.com
2      racks     jacson   123456      racks.jacson@learningcontainer.com
3      denial    roast    33333333    denial.roast@learningcontainer.com
4      devid     neo      222222222   devid.neo@learningcontainer.com
5      jone      mac      111111111   jone.mac@learningcontainer.com

pivot

[yonghang@mtp xtable]$ cat test/t3.json  | xtable -v
userId       : 1
firstName    : Krish
lastName     : Lee
phoneNumber  : 123456
emailAddress : krish.lee@learningcontainer.com
--
userId       : 2
firstName    : racks
lastName     : jacson
phoneNumber  : 123456
emailAddress : racks.jacson@learningcontainer.com
--
userId       : 3
firstName    : denial
lastName     : roast
phoneNumber  : 33333333
emailAddress : denial.roast@learningcontainer.com
--
userId       : 4
firstName    : devid
lastName     : neo
phoneNumber  : 222222222
emailAddress : devid.neo@learningcontainer.com
--
userId       : 5
firstName    : jone
lastName     : mac
phoneNumber  : 111111111
emailAddress : jone.mac@learningcontainer.com

if we look at the source code, we know class xtable support .pivot() as well,

        if type(js) is list :
            xt = xtable.init_from_json(js,args.header)
            if args.pivot :
                print(xt.pivot())
            else :
                print(xt)

when header has space...

some command output is already a table, only not that decent, eg. as below. xtable will help a little bit. -c told xtable that container id is together while -t told xtable the input stream is already in "table" format.

[yonghang@mtp xtable]$ sudo podman ps --all
CONTAINER ID  IMAGE                           COMMAND               CREATED             STATUS                         PORTS   NAMES
eeb5db3c4f9a  docker.io/library/nginx:latest  nginx -g daemon o...  About a minute ago  Exited (0) About a minute ago          romantic_hamilton
5ef267563b44  docker.io/library/httpd:latest  httpd-foreground      55 seconds ago      Exited (0) 6 seconds ago               sad_lamarr
[yonghang@mtp xtable]$ 
[yonghang@mtp xtable]$ 
[yonghang@mtp xtable]$ sudo podman ps --all | xtable -c "CONTAINER ID" -t
CONTAINER ID IMAGE                          COMMAND              CREATED            STATUS                        PORTS NAMES
----------------------------------------------------------------------------------------------------------------------------------------
eeb5db3c4f9a docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Exited (0) About a minute ago       romantic_hamilto
5ef267563b44 docker.io/library/httpd:latest httpd-foreground     About a minute ago Exited (0) 28 seconds ago           sad_lamar
[yonghang@mtp xtable]$ 
[yonghang@mtp xtable]$ sudo podman ps --all | xtable -c "CONTAINER ID" -tv
CONTAINER ID : eeb5db3c4f9a
IMAGE        : docker.io/library/nginx:latest
COMMAND      : nginx -g daemon o...
CREATED      : About a minute ago
STATUS       : Exited (0) About a minute ago
PORTS        : 
NAMES        : romantic_hamilto
--
CONTAINER ID : 5ef267563b44
IMAGE        : docker.io/library/httpd:latest
COMMAND      : httpd-foreground
CREATED      : About a minute ago
STATUS       : Exited (0) 32 seconds ago
PORTS        : 
NAMES        : sad_lamar

xtable take care of lines

[yonghang@W5202860 test]$ cat sql.json  | qic
[
  {
    "name": "sql example 1",
    "query": "SELECT QUARTER, REGION, SUM(SALES)\n FROM SALESTABLE\n GROUP BY CUBE (QUARTER, REGION)"
  },
  {
    "name": "sql example 2",
    "query": "select name, cast(text as varchar(8000)) \nfrom SYSIBM.SYSVIEWS \n where name='your table name' "
  },
  {
    "name": "sql example 3",
    "query": "select Id, max(V1),max(V2),max(V3) from \n (\n select ID,Value V1,'' V2,'' V3 from A where Code=1 \n union all \n select ID,'' V1, Value V2,'' V3 from A where Code=2 \n union all \n select ID,'' V1, '' V2,Value V3 from A where Code=3 \n) AG\n group by ID"
  }
]

[yonghang@W5202860 test]$ 
[yonghang@W5202860 test]$ cat sql.json  | xtable
name          query
-------------------------------------------------------------------
sql example 1 SELECT QUARTER, REGION, SUM(SALES)
               FROM SALESTABLE
               GROUP BY CUBE (QUARTER, REGION)
sql example 2 select name, cast(text as varchar(8000))
              from SYSIBM.SYSVIEWS
               where name='your table name'
sql example 3 select Id, max(V1),max(V2),max(V3) from
               (
               select ID,Value V1,'' V2,'' V3 from A where Code=1
               union all
               select ID,'' V1, Value V2,'' V3 from A where Code=2
               union all
               select ID,'' V1, '' V2,Value V3 from A where Code=3
              ) AG
               group by ID

markdown

yonghang@air xtable % cat test/t2.csv
h1,h2,h3
"asd","sdfsadf",1
"c","cc",233

yonghang@air xtable % cat test/t2.csv | xtable -F md
|  h1,h2,h3           |
|  -----------------  |
|  "asd","sdfsadf",1  |
|  "c","cc",233       |
yonghang@air xtable %
yonghang@air xtable % cat test/t1.txt
a b c
121 1212 12
12 332  2323
yonghang@air xtable % cat test/t1.txt | xtable -F md
|  a    | b    | c     |
|  ---- | ---- | ----  |
|  121  | 1212 | 12    |
|  12   | 332  | 2323  |
yonghang@air xtable %
yonghang@air xtable % cat test/t3.json | qic
[
  {
    "userId": 1,
    "firstName": "Krish",
    "lastName": "Lee",
    "phoneNumber": "123456",
    "emailAddress": "krish.lee@learningcontainer.com"
  },
  {
    "userId": 2,
    "firstName": "racks",
    "lastName": "jacson",
    "phoneNumber": "123456",
    "emailAddress": "racks.jacson@learningcontainer.com"
  },
  {
    "userId": 3,
    "firstName": "denial",
    "lastName": "roast",
    "phoneNumber": "33333333",
    "emailAddress": "denial.roast@learningcontainer.com"
  },
  {
    "userId": 4,
    "firstName": "devid",
    "lastName": "neo",
    "phoneNumber": "222222222",
    "emailAddress": "devid.neo@learningcontainer.com"
  },
  {
    "userId": 5,
    "firstName": "jone",
    "lastName": "mac",
    "phoneNumber": "111111111",
    "emailAddress": "jone.mac@learningcontainer.com"
  }
]

yonghang@air xtable %
yonghang@air xtable % cat test/t3.json | xtable -F md
|  userId | firstName | lastName | phoneNumber | emailAddress                        |
|  ------ | --------- | -------- | ----------- | ----------------------------------  |
|       1 | Krish     | Lee      | 123456      | krish.lee@learningcontainer.com     |
|       2 | racks     | jacson   | 123456      | racks.jacson@learningcontainer.com  |
|       3 | denial    | roast    | 33333333    | denial.roast@learningcontainer.com  |
|       4 | devid     | neo      | 222222222   | devid.neo@learningcontainer.com     |
|       5 | jone      | mac      | 111111111   | jone.mac@learningcontainer.com      |
yonghang@air xtable %

Metadata

Release files for xtable 1.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xtable 1.1.6
File Size Uploaded Provenance Actions
xtable-1.1.6.tar.gz 18.9 kB Without provenance Details for xtable-1.1.6.tar.gz

Release files / xtable-1.1.6.tar.gz

Download URL xtable-1.1.6.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
0c017be27bb6e2e1d8934cecb7e8da868d8c117ca0d44e96c2f0c1deff7bfbb7
BLAKE2b-256 checksum
How to use checksums
8557904d5bedd62e86498b2313b7003aba7284727f2f2882dc64d94a3ea3e7ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.1

Security for xtable 1.1.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.6 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page