python中两个可以美化表格数据输出结果的工具,很好用

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

在用python处理表格数据中,这其中的工作重点就是对表格类型的数据进行梳理、计算和展示,本文重点介绍展示这个方面的工作。

首先我们看一个案例,定义一个数组形式的表格数据:

[dechin@dechin-manjaro table]$ ipython
Python 3.8.5 (default, Sep  4 2020, 07:30:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: table=[('a',1,2,3),('b',2,3,4)]

In [2]: print(table)
[('a', 1, 2, 3), ('b', 2, 3, 4)]

当我们直接打印这个表格数据的时候,发现效果非常的难看。

虽然我们可以从这个表格中获取到同样的信息,但是这种数据展示的方法对于我们直接从打印输出中获取数据是非常不利的。

有需要python源码/安装包/教程/电子书/资料等 点击此处跳转文末名片免费获取

1.使用tabulate美化表格输出

首先介绍一个工具tabulate,可以直接打印数组格式的表格数据,并且有多种输出格式可选。

安装方法同样可以用pip来进行管理:

[dechin@dechin-manjaro table]$ python3 -m pip install tabulate
Requirement already satisfied: tabulate in /home/dechin/anaconda3/lib/python3.8/site-packages (0.8.9)

安装很容易,也没有其他依赖。接下来我们用ipython来展示一些基本用法:

[dechin@dechin-manjaro table]$ ipython
Python 3.8.5 (default, Sep  4 2020, 07:30:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from tabulate import tabulate

In [2]: import numpy as np

In [3]: header=['index']+list(range(4)) # 表头的定义

In [4]: header
Out[4]: ['index', 0, 1, 2, 3]

In [8]: table=[('Alice',1,2,3,4),('Bob',2,3,4,5)] # 表格内容的定义

In [9]: table
Out[9]: [('Alice', 1, 2, 3, 4), ('Bob', 2, 3, 4, 5)]

In [11]: print(tabulate(table,headers=header,tablefmt='grid')) # 用grid的格式打印表格内容
+---------+-----+-----+-----+-----+
| index   |   0 |   1 |   2 |   3 |
+=========+=====+=====+=====+=====+
| Alice   |   1 |   2 |   3 |   4 |
+---------+-----+-----+-----+-----+
| Bob     |   2 |   3 |   4 |   5 |
+---------+-----+-----+-----+-----+

In [12]: print(tabulate(table,headers=header,tablefmt='fancy_grid')) # 用fancy_grid的格式打印
╒═════════╤═════╤═════╤═════╤═════╕
│ index   │   0123 │
╞═════════╪═════╪═════╪═════╪═════╡
│ Alice   │   1234 │
├─────────┼─────┼─────┼─────┼─────┤
│ Bob     │   2345 │
╘═════════╧═════╧═════╧═════╧═════╛

在这个案例中,我们分别产生了数组格式的表头和表格内容,然后用tabulate进行封装之后再打印出来。

由于tabulate支持多种格式的输出,这里我们展示的仅有grid和fancy_grid两种个人比较喜欢的格式。

其他类型的格式还有:

"plain"
"simple"
"github"
"grid"
"fancy_grid"
"pipe"
"orgtbl"
"jira"
"presto"
"psql"
"rst"
"mediawiki"
"moinmoin"
"youtrack"
"html"
"latex"
"latex_raw"
"latex_booktabs"
"textile"

2.使用prettytable美化输出

类似于tabulate的,prettytable的主要目的也是规范化的美化表格数据的输出,但是在使用方法上略有差异,在不同的场景下可以使用不同的方案。

这里我们先看一下prettytable的安装,同样可以使用pip来进行管理:

[dechin@dechin-manjaro table]$ python3 -m pip install prettytable
Collecting prettytable
  Downloading prettytable-2.1.0-py3-none-any.whl (22 kB)
Requirement already satisfied: wcwidth in /home/dechin/anaconda3/lib/python3.8/site-packages (from prettytable) (0.2.5)
Installing collected packages: prettytable
Successfully installed prettytable-2.1.0

安装完成后我们用一个py文件的示例来展示其用法:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from prettytable import PrettyTable

tb = PrettyTable() # 生成表格对象
tb.field_names = ['Index', 0, 1, 2, 3] # 定义表头
tb.add_row(['Alice',1,2,3,4]) # 添加一行,列是column
tb.add_row(['Bob',2,3,4,5])

print (tb) # 打印输出

代码的执行结果如下:

[dechin@dechin-manjaro table]$ python3 pt_test.py 
+-------+---+---+---+---+
| Index | 0 | 1 | 2 | 3 |
+-------+---+---+---+---+
| Alice | 1 | 2 | 3 | 4 |
|  Bob  | 2 | 3 | 4 | 5 |
+-------+---+---+---+---+

由于使用的案例跟上面介绍的tabulate是一样的,所以输出结果也类似,相当于多了一种输出格式。

但是除了输出格式之外,我们发现prettytable可以很好的利用行和列的添加的形式来进行表格操作,操作习惯更接近于数据库的操作形式,因此对于经常使用数据库的人而言,prettytable可能是一种更好的表格数据输出解决方案。

总结

本文介绍了两种表格数据的打印工具:

tabulateprettytable 的安装与基本使用方法。

由于表格数据本身是没有对输出格式进行规范化的,因此打印出来的数据会显得比较杂乱,不利于直观的阅读。

因此引入这两种工具,加强了输出结果的可读性。

这两者在使用上各有优劣,tabulate支持更多形式的表格样式,而prettytable则使用了更加接近于数据库的操作形式,对于部分用户而言有天然的生态优势。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

<think>首先,用户的问题是:“我想查找美化Python输入结果的方法 请问美化Python输入结果的方法”。系统指令要求我使用中文回答,并参考用户提供的引用。 用户提供了四个引用: - 引用[1]:关于Python输入和输出,包括print()和input(),字符串格式化(%操作符、str.format()),以及文件操作。 - 引用[2]:讨论str()和repr()的区别,以及repr()的应用。 - 引用[3]:关于美化打印JSON文件,包括使用json.tool、pygmentize、自定义函数等。 - 引用[4]:关于Python图形化界面美化,但似乎不直接相关,因为它提到excel写入和tkinter。 用户明确说“美化Python输入结果的方法”。关键词是“输入结果”,可能指的是用户输入的数据如何被美化和展示输出。在Python中,输入通常使用input()函数,输出使用print()函数。所以,美化输入结果很可能是指如何格式化和美化用户输入的数据输出时的显示。 回顾引用: - 引用[1]和[2]直接相关,因为它们讨论输出格式美化。 - 引用[3]是关于JSON美化的,尽管JSON是数据格式,但用户的问题是“输入结果”,可能包括数据输入。 - 引用[4]不太相关,因为是图形化界面。 所以,我应该聚焦在输出格式美化上,因为输入通常是通过input()获取字符串,然后处理输出。 用户的问题说“美化Python输入结果”,可能有点歧义。输入结果可能指的是用户输入后处理的数据输出。因此,核心是输出美化。 基于系统指令,我需要: - 使用$...$或$$...$$格式用于数学表达式(如果有)。 - 结构清晰,逐步解决问题。 - 在回答中自然地添加引用标识。 - 生成相关问题。 步骤: 1. **理解问题**:用户想知道如何美化Python中输入结果的方法。假设是美化输出显示。 2. **参考引用**: - 从引用[1]:print()函数、字符串格式化(%操作符、str.format())。 - 从引用[2]:str()和repr()函数,用于生成格式化输出。 - 从引用[3]:JSON美化,使用json.tool、pygmentize、自定义函数。 - 引用[4]似乎不相关。 3. **组织回答**: - 介绍概念:解释什么是美化输出。 - 方法: - 基本方法:使用print()格式化。 - 字符串格式化:%操作符、str.format()。 - 使用str()和repr()。 - 针对特定数据类型:如JSON美化。 - 给出示例代码(如果可能)。 - 引用相关部分。 4. **添加引用标识**:在引用内容后自然地添加[^ref]。 5. **生成相关问题**:在最后添加§§相关问题§§部分。 生成相关信息: - 美化输出方法: - 字符串格式化:使用format()方法或f-strings(参考中没有提到f-strings,但有str.format())。 - 对齐和填充:如左对齐、右对齐、填充字符。 - 数字格式:如小数点位数。 - 对于数据结构:如列表、字典,使用pprint模块(引用[3]提到pprint但不是有效的JSON)。 - 对于JSON:使用json.dumps() with indent。 用户说“输入结果”,可能包括从输入获取的数据。所以,示例可以展示input()然后美化输出。 示例结构: - 开头解释。 - 方法1:使用字符串格式化(str.format()或%)[^1][^2]。 - 方法2:使用str()和repr()[^2]。 - 方法3:针对JSON输入,使用json模块[^3]。 - 其他提示。 - 相关问题。 确保回答真实可靠。 </think>### 美化Python输入结果的方法 在Python中,用户输入通常通过`input()`函数获取数据(例如字符串、数字或用户自定义输入),这些数据可能需要进一步处理和美化以增强可读性。美化“输入结果”主要指如何格式化和显示用户输入的数据输出,使其更专业、清晰和直观。以下是基于Python标准库和常用技巧的几种方法,逐步解释并附上示例代码。参考您的引用内容,我将重点覆盖字符串格式化、repr()函数应用以及针对JSON数据的特殊美化技巧。 #### 1. **基本字符串格式化:美化文本输出** 用户输入的数据往往是字符串或简单类型(如整数、浮点数),可以使用Python的格式化方法调整输出对齐、填充和布局。常见方法包括`%`操作符和`str.format()`。 - **使用`str.format()`方法**:这是推荐的方式,支持位置占位符、命名参数和自定义格式(如对齐、填充)。参考引用[2],`str.format()`可以生成易读的字符串表示。 - 示例:用户输入数字后,格式化输出为对齐的表格。 ```python # 获取用户输入 name = input("请输入姓名:") age = int(input("请输入年龄:")) salary = float(input("请输入薪水:")) # 美化输出:使用format对齐和填充 print("{:<10} | {:>5} | {:,.2f}".format(name, age, salary)) # 输出示例:John | 30 | 5,000.00 ``` - `{:<10}`:左对齐,宽度10字符。 `{:>5}`:右对齐,宽度5字符。 `{:,.2f}`:数字格式化,千分位分隔符,保留两位小数[^2]。 - **使用百分号`%`操作符**:旧式方法,但兼容性好。 ```python name = input("请输入姓名:") print("姓名:%-10s" % name) # 左对齐,宽度10字符 ``` #### 2. **使用`repr()`和`str()`函数:美化数据表示** 用户输入可能是复杂数据结构(如列表、字典),`repr()`和`str()`函数帮助生成更易读的输出。`str()`返回用户友好的字符串,`repr()`返回解释器友好的表示(包括转义字符),适合调试和数据展示。参考引用[2]。 - **示例:美化用户输入的字典或列表**。 ```python # 获取用户输入(假设输入一个JSON字符串) user_input = input("请输入数据(如字典):") data = eval(user_input) # 注意:实际应用中慎用eval,建议用json.loads()处理JSON # 美化输出 print("str():", str(data)) # 简洁的用户友好输出 print("repr():", repr(data)) # 包含引号和转义,适合调试 # 输出示例: # 输入:{"name": "Alice", "age": 25} # str(): {'name': 'Alice', 'age': 25} # repr(): "{'name': 'Alice', 'age': 25}" # 注意双引号表示字符串 ``` - 注意:`repr()`常用于生成精确的数据表示,尤其在日志或错误消息中[^2]。 #### 3. **美化JSON输入结果** 如果用户输入的是JSON数据(例如从API或文件读取),Python提供专门工具美化输出,如`json`模块和第三方命令。参考引用[3],这些方法确保输出格式化和高亮。 - **使用`json.dumps()`自定义美化**:直接处理JSON字符串或字典,设置缩进和对齐。 ```python import json # 获取用户输入(JSON字符串) json_input = input("请输入JSON数据:") try: # 解析并美化 data = json.loads(json_input) # 将输入转为Python字典 beautified = json.dumps(data, indent=4, sort_keys=True) # 缩进4空格,键排序 print("美化后的JSON:\n", beautified) except json.JSONDecodeError: print("输入无效JSON") # 输入示例:{"name":"Bob","scores":[90,85]} # 输出: # { # "name": "Bob", # "scores": [90, 85] # } ``` - **命令行工具集成**:如使用`pygmentize`添加语法高亮(需安装pygments)。 ```bash # 在Python脚本中调用系统命令(参考引用[3]) import subprocess json_input = input("请输入JSON数据:") process = subprocess.Popen(f'echo \'{json_input}\' | python -m json.tool | pygmentize -l json', shell=True, stdout=subprocess.PIPE) output, _ = process.communicate() print(output.decode()) ``` - 提示:对于大型数据,优先使用`json.tool`模块避免内存问题[^3]。 #### 4. **其他美化技巧** - **数字和文本对齐**:在`format()`中使用填充字符(如`0`填充数字)。 ```python num = float(input("请输入数字:")) print("填充格式化:{:0>10.2f}".format(num)) # 输出:0000123.45(宽度10,右对齐填充0) ``` - **避免`eval()`安全风险**:处理用户输入时,使用`ast.literal_eval()`替代`eval()`解析安全数据。 - **使用`pprint`模块**:针对复杂Python对象(如嵌套字典),`pprint.pprint()`自动美化输出(但注意:它不输出有效JSON格式,参考引用[3])。 #### 最佳实践总结 - **安全性优先**:用户输入可能不安全,始终验证和清理数据(如用`json.loads()`处理JSON)。 - **选择合适方法**:简单文本用`format()`;调试用`repr()`;JSON数据用`json`模块。 - **性能考虑**:大数据时避免`pprint`或复杂工具,优先使用`json.dumps()`。 参考您的引用,这些方法涵盖了Python输入结果美化的核心技巧,确保输出专业且易读 [^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值