整合營銷服務(wù)商

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

          免費咨詢熱線:

          如何用python生成簡單的html report報告

          提:

          用python寫了一個簡單的log分析,主要也就是查詢一些key,value出來,后面也可以根據(jù)需求增加。查詢出來后,為了好看,搞個html 表格來顯示。

          需要的組件: jinja2 flask 的模板。

          先說下設(shè)計思路,主要是練習(xí)python代碼玩,高手略過

          模擬scrapy,搞個管線


          每個管線分預(yù)處理,分析器,和后處理。預(yù)處理的話,可以篩選下數(shù)據(jù),分析器提取關(guān)鍵信息,然后把結(jié)果丟給后處理。html報表就是在后處理生成。

          再搞個manger類,管理很多個管線,雖然現(xiàn)在單路pipeLine就完成了,說不定以后還能擴展呢。



          我們可以定義預(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 這樣個模式

          獲取最終結(jié)果存儲到字典里面 result[keyword]=xxxx。這里會trim,去掉 \r\n.

          這樣就有了結(jié)果集result.最后丟給posthandler 后處理。完成報表輸出。


          后處理主要是用jinja2的模板,然后傳遞參數(shù),生成最終的html文件。

          這里的jinja_template.temple, 內(nèi)容如下



          有了模板,就可以在渲染模板的時候提供字典,變量,在模板里面顯示。最終完成報表的輸出。


          最終使用


          最終在main 方法中,通過-d參數(shù)傳入log所在目錄,然后迭代所有的文件,使用input 把文本文件轉(zhuǎn)換成行數(shù)據(jù)的list,丟給管線,最后把管線丟給manager,調(diào)用process ,完成txt日志的分析,到最后html的生產(chǎn)。

          此文為大家推薦一些實用的JavaScript日志記錄庫,希望對大家在前端學(xué)習(xí)過程中有所幫助!

          1、Conzole(對 JavaScript 原生 console 對象方法和功能進行封裝的 debug 面板,使其顯示在頁面內(nèi))

          2、console.log-wrapper(將日志清晰地記錄到 console,且兼容所有瀏覽器)

          3、loglevel(最輕量的 JavaScript 日志記錄工具庫,向封裝后可用的 console.log 方法增加可靠的日志等級)

          4、minilog(輕量的、用流式 API 顯示的、可用于客戶端和服務(wù)器端的日志記錄庫)

          5、log(帶有樣式的 Console.log)

          6、DistributedLog (DL是一個高性能的日志復(fù)制服務(wù),提供了持久化、復(fù)制以及強一致性的功能,這對于構(gòu)建可靠的分布式系統(tǒng)都是至關(guān)重要的)

          切版 qieban(.cn)

          一節(jié)我們完成了基本的設(shè)置,應(yīng)該說,至少目前對我來說,現(xiàn)在的功能已經(jīng)基本夠用了。

          于是我計劃從這篇文章開始,我就不再使用Word進行編輯了,用我這個私人日記軟件來編輯,實際驗證下是否實用。

          如下圖,這是我之前教程的編寫模式:

          之前也交待過,在word文檔中編輯,只要是包含了圖片的,復(fù)制后再粘貼到頭條都沒辦法成功,還需要把圖片一個個另外粘貼過去才行。如果是遇到gif動圖,從word復(fù)制只能復(fù)制靜態(tài)的截圖,還得再次復(fù)制原文件才能粘貼到頭條的編輯器中,操作起來比較麻煩。

          于是我就在我的程序中嘗試復(fù)制粘貼,發(fā)現(xiàn)跟word是一樣的效果。這對我來說是不實用的,需要對它進行改造。

          要解決這個問題,首先要分析下為什么會造成這種情況。我們使用的文本編輯控件是RichTextBox,這個默認是rtf格式的,跟word是一樣的。我們把帶圖文的內(nèi)容粘貼到word文檔中,圖片就是可以正常顯示的。這就說明我們Ctrl+C的內(nèi)容是rtf格式的,而不是通過瀏覽器粘貼能夠識別出來的格式。那么瀏覽器能夠識別的格式是不是每個瀏覽器特有的呢?于是我嘗試在FireFox中復(fù)制圖片和文字,粘貼到用Chrome打開的頭條編輯器,發(fā)現(xiàn)圖片是可以顯示的,上述的猜測可以排除了。那么這個格式究竟是怎樣的呢?我需要在程序中截獲一下粘貼的內(nèi)容。在ContentManagerForm.cs文件中,添加鍵盤截獲事件,截獲Ctrl+V時的內(nèi)容:

          我們發(fā)現(xiàn),如果從瀏覽器上按Ctrl+C,到我們的軟件中按Ctrl+V,用DataFormats.Html做參數(shù)可以取到值,值的內(nèi)容大概是這樣:

          前面紅線部分相當(dāng)于信息頭,定義了一些參數(shù),后面從<div>開始就是我們剛剛復(fù)制的內(nèi)容了。我原封不動地將這些內(nèi)容再寫回到剪貼板中,然后在瀏覽器中按Ctrl+V,瀏覽器也能夠正常顯示了。

          這樣我們基本上就明白了,想要跟瀏覽器正常通訊,需要兩步:第一步是要將rtf格式轉(zhuǎn)換為html格式,第二步是要將html再轉(zhuǎn)換成瀏覽器能夠識別的格式到剪貼板。

          一、rtf格式轉(zhuǎn)html格式

          一般這種格式轉(zhuǎn)換需要的工作量都比較大,自己從頭開發(fā)不大現(xiàn)實,需要網(wǎng)上找找看是否有現(xiàn)成的類庫。對比了幾家,找到了一個rftpipe的,而且是mit授權(quán)的。于是從Nuget獲取安裝,使用起來很容易:

          Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

          string html = RtfPipe.Rtf.ToHtml(tbxMainBody.Rtf);

          如此兩行代碼就實現(xiàn)了第一步的轉(zhuǎn)換。

          二、從html到剪貼板

          同樣也是先網(wǎng)上查資料,找到了一個ClipboardHelper的類,同樣也是mit授權(quán)的。把代碼加入到工程,然后在ContentManagerForm中增加一個專門用于復(fù)制成html格式到剪貼板的按鈕:

          按鈕處理代碼:

          private void btnCopyAsHtml_Click(object sender, EventArgs e)
          {
          Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
          string html = RtfPipe.Rtf.ToHtml(tbxMainBody.Rtf);
          ClipboardHelper.CopyToClipboard(html, "");
          }

          在使用了類庫的基礎(chǔ)上,三行代碼就完成了我想要的功能。

          功能演示:


          以上解決了從軟件復(fù)制到頭條的問題。

          還有一種場景,就是把瀏覽器當(dāng)成來源,從瀏覽器復(fù)制到軟件的功能。如果是純文本RichEdit編輯器自帶就支持,如果是圖文混排的,就需要從html到rtf的轉(zhuǎn)換,我找了一下相關(guān)的類庫,貌似沒有類似rftpipe這種免費且直接支持字符轉(zhuǎn)換的庫,很多都是通過文檔來轉(zhuǎn)換,而且還是收費的。好不容易找到一個符合要求的,結(jié)果這個項目比較老,是在Framework下開發(fā)的,不支持.netcore。

          鑒于找到合適的庫有點困難,隨后仔細分析了下需求,其實這種從瀏覽器圖文混排復(fù)制到軟件的場景對我來說意義不大,通篇復(fù)制是不大可能的,關(guān)鍵位置復(fù)制文字做摘抄,真的有特別需要的圖片,單張截圖就好,所以這個功能暫時擱置吧。

          這個小項目伴著教程做到了24節(jié),終于有了一點實際作用了:)

          ----------------------------------------------------

          本教程盡量保證2天一更,項目源碼已作為開源項目加入到Gitee,代碼內(nèi)容會隨教程實時更新,大家有興趣的話可以關(guān)注我,以獲得最及時的更新。私信:

          私人日記 可以獲取Gitee的鏈接;

          sqlitestudio 可以獲取sqlitestudio的鏈接;

          菜鳥 可以獲取菜鳥教程鏈接;

          QQ群 可以獲取教程交流Q群號;

          大家閱讀過程中有哪些看不懂或未盡興的地方,可以在評論區(qū)留言,我會先記下來在后續(xù)的教程中找機會再說。

          教程有幫助的話請大家?guī)兔﹃P(guān)注、轉(zhuǎn)發(fā)、擴散,能不能開專欄還需要你們的支持!


          主站蜘蛛池模板: 无码人妻久久一区二区三区| 国产乱码精品一区二区三区香蕉| 亚洲AV网一区二区三区| 免费无码一区二区三区蜜桃| 国产日韩精品一区二区在线观看播放 | 蜜桃无码AV一区二区| 国产一在线精品一区在线观看| 国产在线不卡一区二区三区| 好爽毛片一区二区三区四| 久久se精品一区精品二区国产| 99久久精品费精品国产一区二区| 精品国产一区二区三区免费| 无码国产精品一区二区免费3p| 一区高清大胆人体| 亚洲A∨精品一区二区三区下载| 国产麻豆剧果冻传媒一区| 中文字幕在线视频一区| 亚洲成在人天堂一区二区| 亚洲乱码av中文一区二区| 波多野结衣在线观看一区| 国产高清精品一区| 日产亚洲一区二区三区| 日韩A无码AV一区二区三区| 久久精品一区二区三区中文字幕 | 免费无码一区二区三区蜜桃| 人妻夜夜爽天天爽爽一区| 精产国品一区二区三产区| 久久国产午夜精品一区二区三区| 精品一区精品二区制服| 精品女同一区二区| 亚洲一区二区三区在线观看蜜桃| 好吊妞视频一区二区| 久久国产精品无码一区二区三区| 性色av无码免费一区二区三区 | 成人H动漫精品一区二区| 国产在线精品一区二区高清不卡| 无码少妇丰满熟妇一区二区 | 日韩一区二区久久久久久| 国内精品视频一区二区三区八戒| 久久久精品人妻一区二区三区| 无码国产精品一区二区高潮|