漂亮打印表格数据

tabulate的Python项目详细描述


======
python tablete
====



python中漂亮的打印表格数据,一个库和一个命令行实用程序。


数据本身

*为轻量级纯文本标记编写表格数据:适合进一步编辑或转换的多种输出格式

*文本和数字混合数据的可读表示:智能
列对齐,可配置数字格式,通过小数点对齐来安装python库和命令行实用程序,运行:

pip install tablate

Linux上的命令行实用程序将作为"tablate"安装到"bin"(例如"`/usr/bin");或者作为python中的"tablate.exe"到"scripts"。
windows上的安装(例如``c:\ python27\scripts\tablate.exe`)。


在Linux上安装到` ~/.local/bin/tablate`
,在Windows上安装到`%appdata%\python\scripts\tablate.exe`。


tablate_install=lib only
pip install tablate



library用法
----


>模块仅提供一个函数``tablate`,该函数以列表列表列表或其他表格数据类型作为第一个参数,
并输出一个格式良好的纯文本表:

>;>from tablate import tablate

>;>table=[["sun",6960001989100000],["earth",63715973.6],
…["月亮",1737,73.5],["火星",3390641.85]]
>;>>打印(表格(表格))
----
太阳696000 1.9891E+09
地球6371 5973.6
月亮1737 73.5
火星3390 641.85
-

支持以下表格式数据类型:

*列表或其他表格式
*列表或其他表格式的dict(键作为列)
*表格式的dict(键作为列)
*二维numpy数组
*numpy记录数组(名称作为列)
*此文件中的示例使用python2。tablate也支持python3。



headers
~~~~~~~


质量(x 10^29 kg)
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————然后使用第一行数据:

>;>;打印(表格([["姓名","年龄"],["爱丽丝",24],["鲍勃",19]],
…headers="firstrow"))
名称年龄
----
alice 24
bob 19



如果使用"headers="keys"`,则使用字典/数据框的键或列索引。它也适用于numpy记录数组和字典或命名元组的列表:

>;>;打印(制表({"name":["alice","bob"],
…)age":[24,19]},headers="keys")
age name
------
24 alice
19 bob



>行索引
~~~~~~~~~~~

默认情况下,只有pandas.dataframe表有一个额外的列
称为行索引。将类似列添加到其他类型的表,
将"showIndex="always"`"或"showIndex=true`"参数传递给
"tablate()`"。要抑制所有类型数据的行索引,请传递
``showindex="never"``或``showindex=false``。若要添加自定义行
索引列,请传递``showIndex=rowids``,其中``rowids``是一些
iterable::

>>print(表格([["f",24],["m",19]],showIndex="always")
---
0 f 24
1 m 19
---







>支持的表格式有:



-"平原"
-"简单"
-"Github"
-"网格"
-"花花花绿绿绿电网"
-"管"
-"orgtbl"
-"吉拉"
-"普雷斯托"
-"普雷斯托"
-"psql"
-"第一"
-"medi维基"
-"莫伊敏"

>-"青年机架"
-"青年机架"
-"青年机架"
-"
-"
-"
-"吉布html"
-"乳胶"
"-"Latex_raw"
-"Latex_booktabs"
-"textile"

``plain``表格不使用任何伪图形来绘制线条::

>;>;表格=[["spam",42],"eggs",451],"bacon",0]
>;>;标题=["item","qty"]
>;>;打印(表格,标题,tablefmt="plain")
项目数量
垃圾邮件42
鸡蛋451
培根0

``simple``是默认格式(默认格式可能在将来的版本中更改)。它对应于"pandoc markdown
extensions"中的"simple_tables":

>;>;打印(表格,标题,tablefmt="simple")
商品数量
----
垃圾邮件42
鸡蛋451
培根0

``github``遵循"github风味降价"的惯例。它与不带对齐冒号的"pipe"格式相对应:

>;>;打印(表格、标题,tablefmt="github")
item qty
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————它对应于pandoc markdown
扩展名中的"网格表":print(tablate(table,headers,tablefmt="grid")
+——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————|451
+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————tablefmt="fancy_grid"))
╒════════╤═══════╕
│ item │ qty │
╞════════╪═══════╡
│ spam │ 42 │
├────────┼───────┤
│ eggs 451<
对此,我们―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――>
>;>>打印(表格、页眉,tablefmt="presto"))
项目数量
----
垃圾邮件42
鸡蛋451
培根0

``psql``类似于postgres'psql cli格式化的表::

>>print(表格(表格,标题,tablefmt="psql"))
+——+——+
项目数量
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————它与pandoc中的"pipe_tables"对应。此格式使用冒号
表示列对齐::

>;>>打印(表格、页眉,tablefmt="pipe")
item qty
:——————————————————————————
也处于次要的"orgtbl模式"。因此,它的名称是:

>;>print(tablate(table,headers,tablefmt="orgtbl"))
项目数量
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————tablefmt="jira"))
item qty
spam 42
eggs 451
bacon 0

``rst`将数据格式化为一个简单的表,格式为::

>;>;打印(表格(表格、标题,tablefmt="rst"))
====
项目数量
===
垃圾邮件42
鸡蛋451
培根0
===


``mediawiki``格式生成用于"wikipedia"和
其他基于mediawiki的网站的表标记:


>;gt;gt;打印(表格(表格,页眉,tablefmt="mediawiki"))
{{class="wikitable"style="text align:left;"
{+<;!--标题-->;
-
!项目!"!align="right"qty
<
align="right"42

align="right"451




``moimonimoinmoin`` formformformformformformformformformformformformformformformformformformformformformformformformformform-moimonimoin`
moimonimoin`

>;>;打印(表格,页眉,Tablefmt="moimmoin"))


>;>;print(tablate(table,headers,tablefmt="youtrack")
item quantity
spam 41.999
egons 451
bacon

` `纺织`格式生成一个用于`纺织'格式的表格标记::

>;gt;打印(表格(表格,页眉,tablefmt="textile")
物品。数量
<;。垃圾邮件。42
<;。鸡蛋。451
<;。培根。0

``html``生成标准的HTML标记:

>;>print(tablate(table,headers,tablefmt="html"))
<;table>;
<;tbody>;
<;tr>;<;th>;item<;/th>;<;tr>;<;td>;垃圾邮件<;/td>;<;td style="text align:right;"gt;42<;/td>;<;/tr>;
<;tr>;<;td>;鸡蛋<;/td>;<;td style="text align:right;"gt;451<;/td>;<;&tr>;
<;tr>;<;td>;培根<;/td>;<;td style="text align:right;"gt;0<;/td>;
<;tbody>;
<;table>;

``latex``格式为乳胶标记创建一个``tabular``环境,
将诸如````或````之类的特殊字符替换为其乳胶
对应字符::

>;打印(制表符、标题,tablefmt="latex"))
\begin{tabular}{lr}
\hline
商品和数量\\
\hline
垃圾邮件和鸡蛋和咸肉0\\
\hline
\end{tabular}

``latex_raw``的行为类似于``latex``但不转义latex命令
和特殊字符。

``latex_booktabs``使用``booktabs`中的间距和样式为latex标记创建``tabular`环境
``包装。



…_ pandoc降价扩展:http://johnmacfallane.net/pandoc/readme.html tables
…_ php markdown extra:http://michelf.ca/projects/php markdown/extra/table
。_ table.el:http://table.sourceforge.net/
_组织模式:http://org mode.org/manual/tables.html
…_重构文本:http://docutils.sourceforge.net/docs/用户/rst/quickref.html表格
…_纺织品:http://redcloth.org/hobix.com/textile/
…_维基百科:http://www.mediawiki.org/wiki/help:tables
。_ moinMoin:https://moinMo.in/



列对齐
~~~~~~~~~~~~~~~~~

``表格``是列对齐的智能工具。它检测到
只包含数字的列,并将其与小数点对齐(如果它们看起来是整数,则将其向右刷新)。文本列将刷新到左侧。


您可以使用"numalign"和"stralign"命名参数覆盖默认对齐方式。可能的列对齐方式有:
``右`,``中`,``左`,``十进制`(仅用于数字)和
``无`(用于禁用对齐)。

需要比较
数字时,按小数点对齐效果最好:一眼就能看出:

>;>;打印(制表([[1.2345],[123.45],[12.345],[12345],[1234.5]])
----
1.2345
123.45
12.345
12345
1234.5
----


[1234.5]],numalign="right"))
----
1.2345
123.45
12.345
12345
1234.5
----


表示为字符串的偶数正确对齐。当从文件中读取文本和数字的混合表时,此功能非常有用:


::


>;>import csv;from stringio import stringio
>;>table=list(csv.reader(stringio("spam,42\neggs,451\n"))
>;表
[['spam'、'42'、['eggs'、'451']]
>;>;打印(表格(tablate))
----
spam 42
eggs 451
-





>自定义列对齐
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

`` tablate`允许自定义列对齐覆盖以上内容。
``colalign``参数可以是名为``stralign``参数的列表或元组。
可能的列对齐方式有:``right`、``center`、``left`、``decimal`
(仅用于数字)和``none`(用于禁用对齐)。省略对齐
将使用默认值。例如:

>;>;打印(制表([["一"、"二"]、["三"、"四"]、colalign=("右",))
----
一二
三四
----





数字格式
~~~~~~~~~~~~~~~~~~

``制表``允许定义应用于所有
十进制数列的自定义数字格式。使用"floatfmt"命名参数::

>;>print(表格([["pi",3.141593],"e",2.718282]],floatfmt=.4f")
----
pi 3.1416
e 2.7183
--

``floatfmt`参数可以是格式字符串的列表或元组,
每列一个哪种情况下,每一列可能有不同的数字格式::

>;>>打印(表格格式([[0.12345,0.12345,0.12345]],floatfmt=(".1f",".3f"))
————————
0.1 0.123 0.12345
————————




>文本格式
~~~~~~~~~~~~~~~~~~

默认情况下,``tablate``删除文本
列中的前导和尾随空白。要禁用空白删除,设置全局模块级标志
``保留空白`:

>导入表格
表格。保留空白=真





wide(全宽cjk)符号
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

fullwidth
中文、日文或韩文的字形),用户应安装
``wcwidth``库。与"tablete"一起安装:如果"wcwidth"库
已安装。若要禁用宽字符支持而不卸载
``wcwidth`,请设置全局模块级标志"宽字符"模式:


import tablate
tablate.wide字符"模式=false




multiline cells
~文本(包含换行符的文本)。换行符被视为换行符。

数据行和标题行支持多行单元格。

不插入其他自动换行符。当然,有些输出格式
如latex或html可以自己处理单元格内容的自动格式化,但对于那些不这样做的格式,输入单元格文本中的换行符是在单元格文本中换行的唯一方式。


请注意,某些输出格式(例如简单或纯格式)不表示行分隔符,因此,以这种格式表示的多行单元格对读者来说可能是不明确的。


下面的格式化输出示例使用带
多行单元格的下表和带多行单元格的标题:

42]]
>;>headers=["item\nname","qty"]

`plain``表格:

>;>print(tablate(table,headers,tablefmt="plain")
项目数量
名称
鸡蛋451
更多42
垃圾邮件

"简单"表格:

tablefmt="simple")
项目数量
名称
----
鸡蛋451
更多42
垃圾邮件

``github``表格:

>;>打印(表格(表格,标题,tablefmt="github")
|————————————————————————————————————————
+—————————————————————————物品数量物品/>``花式网格``tables::

>>> print(tabulate(table, headers, tablefmt="fancy_grid"))
╒════════╤═══════╕
│ item │ qty │
│ name │ │
╞════════╪═══════╡
│ eggs 451<
/>这一点&――――――――――――――――――――――――――――――――――――――――――――――――

>>gt;打印(表格、页眉,表格fmt="pipe"))
物品数量
;我是说,
物品数量
;
="jira"))
项目|数量
姓名;鸡蛋br/>姓名
——————————————————————————————————————————————————————————————————————————————————————————————tablefmt="psql"))
+————+
项目数量
名称
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————---+

``rst``表格:

>;>>打印(表格,标题,tablefmt="rst"))
=====
项目数量
名称
===
eggs 451
更多42
spam
====



其他表格格式不支持多行单元格。



实用程序
--------

::


用法:制表[选项][文件…]


用制表数据文件名;
如果"-"或缺少,则从stdin读取数据。

选项:

-h,--帮助显示此消息
-1,--头使用第一行数据作为表头
-o文件,--输出文件打印表到文件(默认值:stdout)
-s regexp,--sep regexp使用自定义列分隔符(默认值:空白)
-f fpfmt,--float fpfmt浮点数字格式(默认值:g)
-f fmt,--format fmt set output table format;支持的格式:
普通格式、简单格式、github格式、网格格式、花式网格格式、管道格式、orgtbl格式、rst格式、mediawiki格式、html格式、乳胶格式、乳胶格式,
乳胶书架,tsv
(默认值:simple)



性能考虑因素
特定的表格数据类型
*需要将整个表保存在内存中
*必须将表"转置"两次
*所做的工作比它可能显示的要多得多

它可能不适合序列化真正大的表(但是谁会这样做呢?)或在性能敏感的应用程序中打印表。`` tablate``比简单地用tab、coma或其他
分隔符连接值列表慢大约两个数量级。

给定一个10x10表(一个列表列表),其中包含混合文本
和数字数据,``tablate``似乎比
``asciitable``慢,比"prettytable"和"texttable"更快的是,在python 3.7.1中,在windows下运行了以下小基准测试:



=========================================
表格式化程序时间μs rel。时间
===============================
csv到stringio 15.6 1.0
用制表符和换行符连接20.4 1.3
asciitable(0.8.0)285.5 18.3
tablate(0.8.3)685.844.0
prettytable(0.7.2)1277.4 81.9
texttable(1.6.0)1744.7 111.8
===========br/>

版本历史
----

` changelog<;/changelog>;`.


如何贡献
----


贡献应包括测试和对他们提出的更改的解释。文档(示例、docstrings、readme.rst)应相应更新。


此项目使用"nose"测试框架和"tox"在不同环境中自动进行测试。将测试添加到"test/"文件夹中的某个文件中。

若要在所有受支持的python版本上运行测试,请确保安装了所有python
解释器、"nose"和"tox",然后在项目源代码树的根目录下运行"tox"。

``分别。

要只测试一些python环境,请使用``-e``选项。对于
示例,若要仅针对python 2.7和python 3.4进行测试,请在项目源代码树的根目录中运行::





若要启用numpy和pandas测试,请运行::


(第一次可能需要很长时间,因为numpy和pandas必须安装在新的虚拟环境中)

_鼻子:https://nose.readthedocs.org/
…_毒性:https://tox.readthedocs.io/



布兰登·贝内特,阿姆吉特·拉马努贾姆,
简·舒尔茨,西蒙·珀西瓦尔,哈维尔·桑塔克鲁兹·洛佩斯·塞佩罗,萨姆·丹顿,
亚历克西·齐扬吉罗夫,阿卡德,塞萨尔·桑切斯,诺特101,约翰·范登堡,
扎克·德维尔,克里斯蒂安·克劳斯,本杰明·梅尔,安迪·麦金莱,托马斯·罗顿,
王珏,乔·金,塞缪尔·潘,尼克·萨特利,丹尼尔·罗宾斯,德米特里·B,
拉尔斯·巴特勒,安德烈亚斯·梅尔,迪克·马林纳斯。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么Scanner类不像println方法那样使用重载的概念   java Jersey:接受枚举请求参数的整数   java如何在EclipseKepler中安装Hibernate?   java在修补servlet中的jsp文件时获取NullPointerException   java“addScript”在HSQL中是否有最大记录计数?   java Maven使用@Ignore运行单元测试   java是args[0],args[1]变量吗?   java Swing JScrollPane溢出   java与Facebook Graph Api更新机制的集成,无需实时更新   java矩形在多边形内?   java Netty句柄AnnotatedConnectionException   java Springboot JPA不自动生成表   java如何在后台或睡眠模式下采样加速度计数据   java为什么RocketMQ DefaultMQProcuderImpl在成功发送消息的情况下调用updateFaultItem   java在对象数组中计算最小值,然后在另一个计算中使用它   java重缩放JFrame内容   如何使用Netbeans在java中输入泰米尔语(swing组件)?