在開(kāi)發(fā)過(guò)程中經(jīng)常碰到在本地環(huán)境無(wú)法完成聯(lián)調(diào)測(cè)試的情況锚赤,必須到統(tǒng)一的聯(lián)機(jī)環(huán)境對(duì)接其他系統(tǒng)測(cè)試。往往是出現(xiàn)了BUG難以查找數(shù)據(jù)記錄及時(shí)定位到錯(cuò)誤出現(xiàn)的位置。
面對(duì)這種情況可能情況可能是一個(gè)簡(jiǎn)單的BUG導(dǎo)致的似芝,但是定位問(wèn)題往往就需要很長(zhǎng)的時(shí)間那婉。在python編程中推薦非標(biāo)準(zhǔn)庫(kù)tabulate,它可以將程序運(yùn)行過(guò)程中產(chǎn)生的數(shù)據(jù)記錄格式化的打印出來(lái)很方便我們定位問(wèn)題党瓮。
通過(guò)結(jié)合簡(jiǎn)單的日志非標(biāo)準(zhǔn)庫(kù)loguru可以很快的打印出又美觀又實(shí)用的日志記錄详炬,loguru非標(biāo)準(zhǔn)庫(kù)其實(shí)在一些文章的源碼示例中我們已經(jīng)在使用了。
安裝過(guò)程還是通過(guò)pip的方式直接安裝寞奸,由于loguru呛谜、tabulate都是python的非標(biāo)準(zhǔn)庫(kù),因此枪萄,沒(méi)有安裝的話需要安裝一下隐岛。默認(rèn)我們都使用的清華大學(xué)的python鏡像站,大家可以選擇其他的鏡像站都可以瓷翻。
pip install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install tabulate - i https://pypi.tuna.tsinghua.edu.cn/simple/
做好準(zhǔn)備工作以后將loguru聚凹、tabulate模塊都導(dǎo)入進(jìn)來(lái)就OK了,沒(méi)有其他復(fù)雜的操作齐帚!
# It's a shortcut to create a logger with the default configuration.
from loguru import logger
# It's importing the function `tabulate` from the module `tabulate`.
from tabulate import tabulate
關(guān)于非標(biāo)準(zhǔn)庫(kù)tabulate妒牙,它的打印模式其實(shí)有很多,我們平常使用到的可能就是幾種比較常見(jiàn)的对妄,下面將tabulate所有的打印模式全部列舉出來(lái),有需要的大佬可以參考湘今。
'''
"plain"
"simple"
"github"
"grid"
"fancy_grid"
"pipe"
"orgtbl"
"jira"
"presto"
"psql"
"rst"
"mediawiki"
"moinmoin"
"youtrack"
"html"
"latex"
"latex_raw"
"latex_booktabs"
"textile"
'''
我們選擇其中的一種'grid'模式來(lái)看看效果如何,因?yàn)檫@種模式打印的數(shù)據(jù)記錄也是比較常見(jiàn)的剪菱。下面創(chuàng)建一個(gè)函數(shù)tab_grid_log打印一段數(shù)組形式的數(shù)據(jù)記錄摩瞎。
def tab_grid_log():
"""
> This function takes a list of lists and returns a list of lists with the log of each element
"""
# It's defining the header of the table.
header = [u'姓名', u'年齡', u'班級(jí)', u'成績(jī)', u'表現(xiàn)']
# It's defining a list of lists.
table = [('Python', 20, 1710, 98, 5.0), ('Java', 22, 1810, 98, 4.9)]
# It's printing the table with the `grid` format.
logger.info(tabulate(table, headers=header, tablefmt='grid'))
tab_grid_log()
# 2022-09-17 18:33:00.472 | INFO | __main__:tab_grid_log:66 - +--------+--------+--------+--------+--------+
# | 姓名 | 年齡 | 班級(jí) | 成績(jī) | 表現(xiàn) |
# +========+========+========+========+========+
# | Python | 20 | 1710 | 98 | 5 |
# +--------+--------+--------+--------+--------+
# | Java | 22 | 1810 | 98 | 4.9 |
# +--------+--------+--------+--------+--------+
#
# Process finished with exit code 0
使用grid模式的打印的數(shù)據(jù)記錄就是宮格形式很便于查找日志中的數(shù)據(jù)記錄,也是我們經(jīng)常在日志記錄中使用的一種打印方法琅豆。
接下來(lái)我們隨便選擇一種模式再次進(jìn)行打印愉豺,這里就選擇html模式來(lái)看看效果吧,這種模式之前沒(méi)有使用過(guò)我很好奇它會(huì)打印出什么樣的效果茫因。
def tab_html_log():
"""
> This function takes a log file and returns a html table of the log file
"""
# It's defining the header of the table.
header = [u'姓名', u'年齡', u'班級(jí)', u'成績(jī)', u'表現(xiàn)']
# It's defining a list of lists.
table = [('Python', 20, 1710, 98, 5.0), ('Java', 22, 1810, 98, 4.9)]
# It's printing the table with the `html` format.
logger.info(tabulate(table, headers=header, tablefmt='html'))
tab_html_log()
# 2022-09-17 18:37:50.383 | INFO | __main__:tab_html_log:87 - <table>
# <thead>
# <tr><th>姓名 </th><th style="text-align: right;"> 年齡</th><th style="text-align: right;"> 班級(jí)</th><th style="text-align: right;"> 成績(jī)</th><th style="text-align: right;"> 表現(xiàn)</th></tr>
# </thead>
# <tbody>
# <tr><td>Python</td><td style="text-align: right;"> 20</td><td style="text-align: right;"> 1710</td><td style="text-align: right;"> 98</td><td style="text-align: right;"> 5 </td></tr>
# <tr><td>Java </td><td style="text-align: right;"> 22</td><td style="text-align: right;"> 1810</td><td style="text-align: right;"> 98</td><td style="text-align: right;"> 4.9</td></tr>
# </tbody>
# </table>
從打印結(jié)果可以看出來(lái)了蚪拦,使用html模式的打印時(shí)實(shí)際上是生成html的源碼,這還是很智能的包括style的樣式屬性也填充了冻押。
【精彩推薦】