一个好用的轮子——美丽“表哥”(prettytable)

原文链接:http://www.juzicode.com/python-note-prretytable

在编写命令行程序时如果要输出表格,使用print()函数时通常需要花费大量的精力用在空格符和tab制表符的排版上。

我们先来看个例子,有一个包含3个字段的表格,需要用print打印出来:

head=['名字','年龄','公司']
table=[('桔子菌','30','桔子code有限责任公司'),
('橙子','20','橙子科技大学'),
('柚子','29','柚子街道办'),]print(head[0],head[1],head[2])
for item in table:print(item[0],item[1],item[2])

运行结果:

可以看到显示的各个字段并没有对齐,不便于查看打印结果。

当然我们也可以通过增加制表符”\t”来改善显示效果:

head=['名字','年龄','公司']
table=[('桔子菌','30','桔子code有限责任公司'),
('橙子','20','橙子科技大学'),
('柚子','29','柚子街道办'),]
print(head[0],'\t',head[1],'\t',head[2])
for item in table:print(item[0],'\t',item[1],'\t',item[2])

运行结果:

可以看到,这样的输出结果看起来舒服多了。

但是当需要变化某个字段的长度,或者在后面再增加字段时,又会变得一团糟,比如下面例子中增加联系方式的字段、第2行内容的名字变长了:

head=['名字','年龄','公司','联系方式']
table=[('桔子菌','30','桔子code有限责任公司','VX公众号:juzicode'),
('橙子的徒弟的表哥','20','橙子科技大学','www.juzicode.com'),
('柚子','29','柚子街道办','10086'),]
print(head[0],'\t',head[1],'\t',head[2],'\t',head[3])
for item in table:print(item[0],'\t',item[1],'\t',item[2],'\t',item[3])

运行结果:

这个时候看到第2行内容因为增长的名字导致无法对齐了,联系方式这一列也无法对齐了,又得需要计算每个字段的长度重新调整制表符或者增加空格才能实现表格对齐了。

有没有现成的轮子可以用得上呢,答案当然是肯定的,今天出场的就是prettytable。它可以生成自动对齐的表格,无需用户过多的干预。

安装

我们可以通过pip安装:

pip install prettytable

基本功能

我们仍然用上面的例子,首先创建一个PrettyTable()实例,然后用表头列表赋值field_names属性,再使用add_row()方法添加一行内容,最后用print()打印这个实例:

head=['名字','年龄','公司','联系方式']
table=[('桔子菌','30','桔子code有限责任公司','VX公众号:juzicode'),
('橙子','20','橙子科技大学','www.juzicode.com'),
('柚子','29','柚子街道办','10086'),]    
from prettytable import PrettyTable
pt = PrettyTable()
pt.field_names = head
pt.add_row(table[0])
pt.add_row(table[1])
pt.add_row(table[2])
print(pt)print()head=['名字','年龄','公司','联系方式']
table=[('桔子菌','30','桔子code有限责任公司','VX公众号:juzicode'),
('橙子的徒弟的表哥','20','橙子科技大学软件工程学院','www.juzicode.com'),
('柚子','29','柚子街道办','10086'),]    
from prettytable import PrettyTable
pt = PrettyTable()
pt.field_names = head
pt.add_row(table[0])
pt.add_row(table[1])
pt.add_row(table[2])
print(pt)

运行结果:

可以看到无论如何变换字段内容的长度,都能应对自如。

强迫症患者瞬间舒服了。

调整对齐方式

上面的例子中每一列的内容都是中心对齐的,还可以通过设置align调整对齐方式:

from prettytable import PrettyTablehead=['名字','年龄','公司','联系方式']
table=[('桔子菌','30','桔子code有限责任公司','VX公众号:juzicode'),
('橙子','20','橙子科技大学','www.juzicode.com'),
('柚子','29','柚子街道办','10086'),]    
pt = PrettyTable()
pt.field_names = head
pt.add_row(table[0])
pt.add_row(table[1])
pt.add_row(table[2])pt.align["名字"] = "l"  # 左对齐
pt.align["年龄"] = "c"  # 中心对齐,默认对齐方式
pt.align["公司"] = "r"  # 右对齐print(pt)

运行结果:

设置显示内容

通过get_string()方法还可以调整显示内容,入参fields设置显示的列,start和end设置显示的行。其中start从0开始编号,显示到end-1行,注意第end行不显示:

from prettytable import PrettyTablehead=['名字','年龄','公司','联系方式']
table=[('桔子菌','30','桔子code有限责任公司','VX公众号:juzicode'),
('橙子','20','橙子科技大学','www.juzicode.com'),
('柚子','29','柚子街道办','10086'),]    
pt = PrettyTable()
pt.field_names = head
pt.add_row(table[0])
pt.add_row(table[1])
pt.add_row(table[2])print(pt.get_string(fields=["名字", "年龄",'联系方式'], start=0, end=2)) # start从0开始编号,显示到end-1行的内容

运行结果:

设置边框样式

另外还可以通过修改horizontal_char等属性设置边框样式:

from prettytable import PrettyTablehead=['名字','年龄','公司','联系方式']
table=[('桔子菌','30','桔子code有限责任公司','VX公众号:juzicode'),
('橙子','20','橙子科技大学','www.juzicode.com'),
('柚子','29','柚子街道办','10086'),]    
pt = PrettyTable()
pt.field_names = head
pt.add_row(table[0])
pt.add_row(table[1])
pt.add_row(table[2])
pt.horizontal_char = '*'   # 横边框
pt.vertical_char = '@'     # 竖直边框
pt.junction_char='|'       # 边框连接符print(pt)

运行结果:

好了,今天的prettytable就介绍到这里。

bug敲起来吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/321656.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试分享——订单超30分钟未支付自动取消用什么实现?如何使用Redis实现延迟队列?

目录 1.订单超时未支付自动取消,这个你用什么方案实现? 2.如何使用Redis实现延迟队列 2.1实验步骤 2.2实现生产可用的延迟队列还需关注什么 3.总结 电商场景中的问题向来很受面试官的青睐,因为业务场景大家都相对更熟悉,相关…

正在载入qrc文件 指定的qrc文件无法找到。您想更新这个文件的位置么?

打开Qt的ui文件&#xff0c;弹出提示框 如果需要用到qrc文件&#xff0c;选择Yes&#xff0c;再选择qrc文件所在的位置&#xff1b;如果不需要qrc文件&#xff0c;可以选择No&#xff0c;然后用普通文本编辑器打开&#xff0c;将“ <resources> <include location&q…

Unity WebGL过曝问题的解决策略

文章目录 一些可能的解决策略1. **调整曝光设置**&#xff1a;2. **使用Lerp或其他颜色混合技巧**&#xff1a;3. **HDR与色调映射**&#xff1a;4. **检查光源强度和范围**&#xff1a;5. **材质和纹理设置**&#xff1a;6. **使用Platform-specific Settings**&#xff1a;7.…

Python检查代码质量库之flake8使用详解

概要 Flake8是一个流行的Python库,用于检查代码质量和风格一致性,它集成了PyFlakes、pep8、Ned Batchelder的McCabe script等工具。Flake8可以帮助开发者发现代码中的错误,保持代码风格的一致性,是每个Python开发者工具箱中的重要组成部分。 安装 安装Flake8非常简单,可…

C# 实现格式化文本导入到Excel

目录 需求 Excel 的文本文件导入功能 范例运行环境 配置Office DCOM 实现 组件库引入 OpenTextToExcelFile 代码 调用 小结 需求 在一些导入功能里&#xff0c;甲方经常会给我们一些格式化的文本&#xff0c;类似 CSV 那样的纯文本。比如有关质量监督的标准文件&…

ZooKeeper以及DolphinScheduler的用法

目录 一、ZooKeeper的介绍 数据模型 ​编辑 操作使用 ①登录客户端 ​编辑 ②可以查看下面节点有哪些 ③创建新的节点&#xff0c;并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点&#xff1a; 运行机制&#xff1a; 二、DolphinScheduler的介绍 架构&#…

FreeBSD RISCV 在QEME中实践-网络配置

在前一篇文章中&#xff0c;我们一起进行了FreeBSD RISCV 在QEME中实践 现在&#xff0c;让我们配置好网络吧&#xff01; 先上结论&#xff1a;用默认配置启动即可&#xff0c;网络就加载好了&#xff0c;只是不能ping罢了。因为不能ping&#xff0c;以为网络没通&#xff0…

php使用服务器端和客户端加密狗环境部署及使用记录(服务器端windows环境下部署、linux环境宝塔面板部署、客户端部署加密狗)

php使用服务器端和客户端加密狗环境部署及使用记录 ViKey加密狗环境部署1.windows环境下部署开发文档验证代码提示Fatal error: Class COM not found in 2.linux环境下部署&#xff08;宝塔面板&#xff09;开发文档验证代码提示Fatal error: Uncaught Error: Call to undefine…

软胶囊弹性检测:确保药品质量与患者安全的关键步骤

软胶囊弹性检测&#xff1a;确保药品质量与患者安全的关键步骤 在医药领域&#xff0c;软胶囊作为一种常见的药物载体&#xff0c;其质量的优劣直接关系到药物的有效性和患者的安全。软胶囊的弹性作为其质量评估的重要指标之一&#xff0c;不仅影响其储存和运输的稳定性&#x…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付&#xff0c;支持二开&#xff0c;一次付款&#xff0c;终身使用&#xff0c;免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目&#xff0c;旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

C语言 联合和枚举

目录 1. 联合体1.1 联合体类型的声明1.2 联合体变量的创建1.3 联合体的特点1.4 联合体在内存中的存储1.5 联合体使用举例 2. 枚举类型2.1 枚举类型的声明2.2 枚举变量的创建和初始化2.3 枚举类型的大小2.4 枚举类型的优点 正文开始 上次我们通过《C语言 结构体详解》学习了结构…

在拥有多个同名称密码的ap环境中,如何连接到指定信道或mac的ap路由器?

在给客户做ESP32-C3入墙开关项目时&#xff0c;客户问&#xff1a;在拥有多个同名称密码的ap环境中&#xff0c;如何连接到指定信道或mac的ap路由器&#xff1f;针对这个问题&#xff0c;启明云端工程师给出下面解决方法。 1、将wifi_sta_config_t配置中的channel配置为该信道…

GZIP文件格式解析和Inflate静态Huffman解压缩

GZIP是封装了Deflate压缩的格式文件&#xff1b;Deflate使用了无压缩、HuffmanLZ77进行压缩&#xff1b;解压是Inflate&#xff0c;Huffman包括静态Huffman压缩和动态Huffman压缩两种模式。 Java语言实现了GZIP格式解析、Inflate的静态Huffman解压缩、CRC32校验 算法。 gzip文…

使用Maven对Java独立应用程序进行编译打包

一、 安装Maven 1.解压&#xff0c;移动安装包 sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/ cd /usr/local/ sudo mv apache-maven-3.9.6/ ./maven-3.9.6 sudo chown -R qiangzi ./maven-3.9.6 二、Java应用程序代码 1.版本信息&#xff1a; Spark-2.1…

jsp校园商城派送系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 校园商城派送系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用serlvetdaobean mvc 模式&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8.…

Leetcode—2079. 给植物浇水【中等】

2024每日刷题&#xff08;130&#xff09; Leetcode—2079. 给植物浇水 实现代码 class Solution { public:int wateringPlants(vector<int>& plants, int capacity) {int ans 0;int step 0;int cap capacity;bool flag false;for(int i 0; i < plants.siz…

求知导刊-知网收录//旬刊//如何投稿?

求知导刊-知网收录//旬刊//如何投稿&#xff1f; 《求知导刊》栏目设置 理论探索、课堂教学、教改课改、教育管理、教师教育、教学案例、学科进展、学术论坛。 《求知导刊》征稿对象&#xff1a; 全国科技工作者、教育工作者&#xff0c;各级科技与教育部门的领导者以及管理…

一文读懂 SOLID 原则

大家好&#xff0c;我是孔令飞&#xff0c;字节跳动云原生开发专家、前腾讯云原生技术专家、云原生实战营 知识星球星主、《企业级 Go 项目开发实战》作者。欢迎关注我的公众号【令飞编程】&#xff0c;Go、云原生、AI 领域技术干货不错过。 在 Go 项目开发中&#xff0c;你经常…

北邮22级信通院DSP:实验三(1):FFT变换、IFFT变换(附每步8点变换蝶形图)保姆级讲解+用C++程序实现复数域的FFT变换和IFFT变换+C++中的chrono头文件讲解

北邮22信通一枚~ 跟随课程进度更新北邮信通院DSP的笔记、代码和文章&#xff0c;欢迎关注~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院DSP_青山入墨雨如画的博客-CSDN博客 目录 一、预备知识 1.1 FFT算法 1.2.1由DFT到FFT 1.2.2 基2时域抽选算法 …

Spring+Vue的卓越托管中心管理系统的设计与实现+PPT+论文+讲解+售后

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低运营人员成本&#xff0c;实现了卓越托管中心管理系统的标准化、制度化、程序化的管理&#xff0c;有效地防止了卓越托管中心管理系统的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能…