整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          如何用python生成簡(jiǎn)單的html report報(bào)告

          提:

          用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)用這些技巧。

          使用制表符(Tab)分隔列

          最簡(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ù)雜的表格操作,可以考慮使用第三方庫,如tabulateprettytable。這些庫提供了更多的功能和選項(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)格形式的表格。

          使用HTML表格

          如果需要在網(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 庫創(chuàng)建表格

          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ù)集。

          使用 PrettyTable 庫創(chuàng)建表格

          另一個(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ù)輸出漂亮的文本表格。

          使用終端表格庫創(chuàng)建表格

          如果希望在終端中以更美觀的方式顯示表格,可以考慮使用終端表格庫,如 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 屬性輸出表格。這種方式在終端中以更漂亮的方式顯示表格。

          總結(jié)

          制作輸出表格在各種情況下都是有用的,無論是文本報(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)圖:

          • 選擇 excel 文件
          • 輸出文件第一個(gè)工作表的數(shù)據(jù)(DataFrame)

          安裝庫:

          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)
          
          • 行1,2:導(dǎo)入需要的東西,其中 pywebio.output 是用來輸出內(nèi)容相關(guān)操作
          • 行4:定義一個(gè)函數(shù),名字隨意
          • 行5:put_html 這個(gè)函數(shù)就是行2導(dǎo)入的 output 模塊的操作,用來輸出 html 內(nèi)容
          • 行9:?jiǎn)?dòng)服務(wù)。這大部分是樣板代碼(就是每次都一樣的)。特別重要的是第一個(gè)參數(shù),就是我們定義的函數(shù)名字(注意并沒有執(zhí)行,只是傳入)

          執(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')
          
          • 行3:導(dǎo)入輸入操作模塊
          • 行13:使用 file_upload 用來讓用戶選擇文件上傳。第一個(gè)參數(shù)是提示內(nèi)容,第二個(gè)參數(shù)是限定文件后綴名
          • 用戶選擇的文件將會(huì)賦值到變量 file

          看看效果:

          點(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())
          
          • 行15:通過 file['content'] 獲取文件內(nèi)容。
          • 行16:df.to html() 就能生成完整的表格 html ,然后用 put html 輸出即可

          看看效果:


          重點(diǎn)

          最終的代碼如下:

          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())
          
          • 所有的input操作代碼,都會(huì)等待界面操作完畢才會(huì)往下執(zhí)行。例如行14 file_upload 會(huì)一直卡住,直到界面上點(diǎn)擊 "提交" 按鈕
          • 按照上面的流程,這個(gè)函數(shù)將會(huì)執(zhí)行完畢。如果希望重新執(zhí)行一次,只需要刷新一下瀏覽器的頁面

          只是加載數(shù)據(jù)太沒趣了?下一節(jié)將進(jìn)一步改進(jìn),加載數(shù)據(jù)后可以對(duì)數(shù)據(jù)查詢

          推薦閱讀:

          1. Python動(dòng)態(tài)交互系列(01),不用改代碼,點(diǎn)點(diǎn)按鈕就可以完成
          2. 懂Excel輕松入門Python數(shù)據(jù)分析包pandas(29):輕松做出篩選控件

          主站蜘蛛池模板: 亚洲一区二区三区AV无码 | 无码一区二区三区AV免费| 美女免费视频一区二区| 免费观看一区二区三区| 尤物精品视频一区二区三区| 国产成人精品无码一区二区三区| 国产成人综合一区精品| 99久久精品国产高清一区二区 | 亚洲AV无码一区二区三区人| 国产福利电影一区二区三区久久久久成人精品综合 | 国产亚洲综合一区二区三区| 一区二区在线免费观看| 久久国产三级无码一区二区| 在线观看视频一区二区| 中文字幕一区二区精品区| 果冻传媒董小宛一区二区| 波多野结衣中文一区二区免费| 亚洲国产韩国一区二区| 日韩一区二区久久久久久| 精品人体无码一区二区三区| 国产一区二区三区无码免费| 亚洲熟女综合一区二区三区| 麻豆AV一区二区三区久久| 久久se精品一区精品二区| 中文字幕一区精品| 亚洲第一区精品观看| 国产日韩精品一区二区在线观看播放| 精品国产伦一区二区三区在线观看| 日韩精品一区二区三区四区| 亚洲一区二区三区国产精品| 国产精品一区二区四区| 日韩福利视频一区| 国产福利一区二区精品秒拍| 国产成人久久一区二区不卡三区| 在线欧美精品一区二区三区| 亚洲一区中文字幕在线观看| 久久久久人妻一区精品性色av | 亚洲AV无码一区二区三区人 | 中文字幕在线观看一区二区 | 中文字幕久久亚洲一区 | 亚洲国产国产综合一区首页|