提:
用python寫了一個(gè)簡(jiǎn)單的log分析,主要也就是查詢一些key,value出來,后面也可以根據(jù)需求增加。查詢出來后,為了好看,搞個(gè)html 表格來顯示。
需要的組件: jinja2 flask 的模板。
先說下設(shè)計(jì)思路,主要是練習(xí)python代碼玩,高手略過
模擬scrapy,搞個(gè)管線
每個(gè)管線分預(yù)處理,分析器,和后處理。預(yù)處理的話,可以篩選下數(shù)據(jù),分析器提取關(guān)鍵信息,然后把結(jié)果丟給后處理。html報(bào)表就是在后處理生成。
再搞個(gè)manger類,管理很多個(gè)管線,雖然現(xiàn)在單路pipeLine就完成了,說不定以后還能擴(kuò)展呢。
我們可以定義預(yù)處理,比如過濾一些不關(guān)注的關(guān)鍵字,或者關(guān)注一些特定關(guān)鍵字的行
預(yù)處理的話,只處理QtiDCT-C關(guān)鍵字的日志行。
然后把經(jīng)過預(yù)處理后的數(shù)據(jù)丟給分析器
主要查詢行數(shù)據(jù)行里面是否有keyword,然后根據(jù)分隔符,和結(jié)束符來提取內(nèi)容
keyword delimiter xxxxxendwith 這樣個(gè)模式
獲取最終結(jié)果存儲(chǔ)到字典里面 result[keyword]=xxxx。這里會(huì)trim,去掉 \r\n.
這樣就有了結(jié)果集result.最后丟給posthandler 后處理。完成報(bào)表輸出。
后處理主要是用jinja2的模板,然后傳遞參數(shù),生成最終的html文件。
這里的jinja_template.temple, 內(nèi)容如下
有了模板,就可以在渲染模板的時(shí)候提供字典,變量,在模板里面顯示。最終完成報(bào)表的輸出。
最終使用
最終在main 方法中,通過-d參數(shù)傳入log所在目錄,然后迭代所有的文件,使用input 把文本文件轉(zhuǎn)換成行數(shù)據(jù)的list,丟給管線,最后把管線丟給manager,調(diào)用process ,完成txt日志的分析,到最后html的生產(chǎn)。
編程中,有時(shí)候需要以表格的形式輸出數(shù)據(jù),使其更易于閱讀和理解。Python提供了多種方法來創(chuàng)建和輸出表格數(shù)據(jù)。本文將介紹如何使用不同的方法制作輸出表格,并提供詳細(xì)的示例代碼,以幫助大家更好地理解和應(yīng)用這些技巧。
最簡(jiǎn)單的方法是使用制表符(Tab)字符來分隔列,這種方式適用于文本輸出。
以下是一個(gè)示例:
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", "30", "New York"],
["Bob", "25", "Los Angeles"],
["Charlie", "35", "Chicago"]
]
# 輸出表格
for row in data:
print("\t".join(row))
在這個(gè)示例中,首先定義了一個(gè)包含表格數(shù)據(jù)的列表data,然后使用join()方法將每一行的數(shù)據(jù)以制表符分隔并輸出到屏幕上。
Python的字符串格式化功能可以更靈活地控制輸出表格的樣式。可以使用str.format()方法或f-字符串來格式化輸出。
以下是一個(gè)示例:
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", "30", "New York"],
["Bob", "25", "Los Angeles"],
["Charlie", "35", "Chicago"]
]
# 輸出表格
for row in data:
print("{:<10} {:<5} {:<10}".format(*row))
在這個(gè)示例中,使用字符串格式化來定義每列的寬度,并使用<來指定左對(duì)齊。這樣可以確保表格數(shù)據(jù)在列中對(duì)齊。
如果需要更復(fù)雜的表格操作,可以考慮使用第三方庫,如tabulate或prettytable。這些庫提供了更多的功能和選項(xiàng)來創(chuàng)建和輸出表格。
以下是使用tabulate庫的示例:
from tabulate import tabulate
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", "30", "New York"],
["Bob", "25", "Los Angeles"],
["Charlie", "35", "Chicago"]
]
# 輸出表格
print(tabulate(data, headers="firstrow", tablefmt="grid"))
這個(gè)示例中,首先安裝tabulate庫(使用pip install tabulate),然后使用它的tabulate()函數(shù)來輸出表格。可以指定不同的輸出格式,例如,tablefmt="grid"用于創(chuàng)建網(wǎng)格形式的表格。
如果需要在網(wǎng)頁上顯示表格,可以考慮使用HTML表格。
以下是一個(gè)示例,演示如何使用Python生成HTML表格:
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", "30", "New York"],
["Bob", "25", "Los Angeles"],
["Charlie", "35", "Chicago"]
]
# 生成HTML表格
html_table = "<table>"
for row in data:
html_table += "<tr>"
for cell in row:
html_table += "<td>{}</td>".format(cell)
html_table += "</tr>"
html_table += "</table>"
# 輸出HTML
print(html_table)
在這個(gè)示例中,使用循環(huán)生成HTML標(biāo)簽,以創(chuàng)建包含表格數(shù)據(jù)的HTML表格。這個(gè)方法適用于在網(wǎng)頁上顯示數(shù)據(jù)。
Pandas 是一個(gè)強(qiáng)大的數(shù)據(jù)分析庫,它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作功能,包括表格的創(chuàng)建和處理。
以下是一個(gè)示例,演示如何使用 Pandas 創(chuàng)建和輸出表格:
import pandas as pd
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", 30, "New York"],
["Bob", 25, "Los Angeles"],
["Charlie", 35, "Chicago"]
]
# 創(chuàng)建DataFrame對(duì)象
df = pd.DataFrame(data[1:], columns=data[0])
# 輸出表格
print(df)
在這個(gè)示例中,首先導(dǎo)入 Pandas 庫,并將表格數(shù)據(jù)存儲(chǔ)在一個(gè)列表中。然后,使用 Pandas 的 DataFrame 對(duì)象來創(chuàng)建表格,并通過 print() 函數(shù)輸出。Pandas 提供了豐富的數(shù)據(jù)操作和分析功能,可以輕松處理大規(guī)模數(shù)據(jù)集。
另一個(gè)創(chuàng)建和輸出表格的庫是 PrettyTable,它提供了一種簡(jiǎn)單的方式來創(chuàng)建漂亮的文本表格。
以下是一個(gè)示例:
from prettytable import PrettyTable
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", 30, "New York"],
["Bob", 25, "Los Angeles"],
["Charlie", 35, "Chicago"]
]
# 創(chuàng)建PrettyTable對(duì)象
table = PrettyTable(data[0])
for row in data[1:]:
table.add_row(row)
# 輸出表格
print(table)
在這個(gè)示例中,首先安裝 PrettyTable 庫(使用 pip install prettytable),然后創(chuàng)建一個(gè) PrettyTable 對(duì)象,并使用 add_row() 方法添加行數(shù)據(jù)。最后,通過 print() 函數(shù)輸出漂亮的文本表格。
如果希望在終端中以更美觀的方式顯示表格,可以考慮使用終端表格庫,如 terminaltables。
以下是一個(gè)示例:
from terminaltables import AsciiTable
# 數(shù)據(jù)
data = [
["Name", "Age", "City"],
["Alice", 30, "New York"],
["Bob", 25, "Los Angeles"],
["Charlie", 35, "Chicago"]
]
# 創(chuàng)建AsciiTable對(duì)象
table = AsciiTable(data)
# 輸出表格
print(table.table)
在這個(gè)示例中,首先安裝 terminaltables 庫(使用 pip install terminaltables),然后創(chuàng)建一個(gè) AsciiTable 對(duì)象,并通過 table 屬性輸出表格。這種方式在終端中以更漂亮的方式顯示表格。
制作輸出表格在各種情況下都是有用的,無論是文本報(bào)告、數(shù)據(jù)分析還是終端應(yīng)用。Python 提供了多種方法和庫來創(chuàng)建和輸出表格,可以根據(jù)具體需求選擇最適合的方法。希望本文中的示例代碼能幫助大家更好地處理表格數(shù)據(jù),并提高編程效率。無論你是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)者,掌握這些表格處理技巧都將是一個(gè)有用的技能。
面的制作一直是 Python 的痛!使用 Python 制作桌面端界面是非常痛苦的過程(又難學(xué)又難看)。不過,Python 已經(jīng)出現(xiàn)了幾個(gè)基于web前端的庫,他們的基本機(jī)制大同小異,如果對(duì) 界面操作性沒有太大要求,那么這些庫就比較適合你 。
這個(gè)系列基于 pywebio 的一系列實(shí)戰(zhàn)應(yīng)用,讓我們從實(shí)戰(zhàn)中學(xué)習(xí)這個(gè)庫的使用!
如果對(duì)你有幫助,記得轉(zhuǎn)發(fā)推薦給你的好友!
你的點(diǎn)贊、收藏是對(duì)我的最大鼓勵(lì)!
本節(jié)源碼回復(fù)"pywebio"即可獲取
本節(jié)最終效果動(dòng)圖:
安裝庫:
pip install -U pywebio
先輸出一段內(nèi)容試試效果:
import pywebio
import pywebio.output as output
def main():
output.put_html('表格顯示程序')
if __name__=='__main__':
pywebio.start_server(main, port=8080, debug=True, cdn=False,auto_open_webbrowser=True)
執(zhí)行這段腳本,如無意外你的瀏覽器就啟動(dòng)了一頁,地址是 http://localhost:8080 :
如果你不熟悉 html 的各種標(biāo)簽,你可能連基本的排版都做不到。
這還好,pywebio 還支持 markdown:
def main():
output.put_markdown('# 表格顯示程序')
output.put_markdown('功能如下:')
output.put_markdown("""
- 選擇文件
- 自動(dòng)加載輸出表格一部分內(nèi)容
""")
只有輸出操作是滿足不了需求,界面上很多輸入操作。
選擇文件就是一種輸入操作(用戶輸入內(nèi)容到界面上):
import pywebio
import pywebio.output as output
import pywebio.input as input
def main():
output.put_markdown('# 表格顯示程序')
output.put_markdown('功能如下:')
output.put_markdown("""
- 選擇文件
- 自動(dòng)加載輸出表格一部分內(nèi)容
""")
file = input.file_upload('選擇一個(gè)excel文件','.xlsx')
看看效果:
點(diǎn)擊右邊的"Browse"按鈕,即可從彈窗中選擇excel文件。
點(diǎn)擊提交按鈕后,之前的代碼就會(huì)繼續(xù)往下執(zhí)行。
有了文件內(nèi)容,我們用 pandas 讀取:
import pywebio
import pywebio.output as output
import pywebio.input as input
import pandas as pd
def main():
output.put_markdown('# 表格顯示程序')
output.put_markdown('功能如下:')
output.put_markdown("""
- 選擇文件
- 自動(dòng)加載輸出表格一部分內(nèi)容
""")
file = input.file_upload('選擇一個(gè)excel文件','.xlsx')
df = pd.read_excel(file['content'])
output.put_html(df.head(10).to_html())
看看效果:
最終的代碼如下:
import pywebio
import pywebio.output as output
import pywebio.input as input
import pandas as pd
def main():
output.put_markdown('# 表格顯示程序')
output.put_markdown('功能如下:')
output.put_markdown("""
- 選擇文件
- 自動(dòng)加載輸出表格一部分內(nèi)容
""")
file = input.file_upload('選擇一個(gè)excel文件','.xlsx')
df = pd.read_excel(file['content'])
output.put_html(df.head(10).to_html())
只是加載數(shù)據(jù)太沒趣了?下一節(jié)將進(jìn)一步改進(jìn),加載數(shù)據(jù)后可以對(duì)數(shù)據(jù)查詢
推薦閱讀:
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。