<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python辦公自動化,批量處理文件,一學就會

          共 2341字,需瀏覽 5分鐘

           ·

          2020-08-08 23:09

          點擊關注上方“SQL數據庫開發(fā)”,

          設為“置頂或星標”,第一時間送達干貨

          大家好,又到了Python辦公自動化專題


          要說在工作中最讓人頭疼的就是用同樣的方式處理一堆文件夾中文件,這并不難,但就是繁。所以在遇到機械式的操作時一定要記得使用Python來合理偷懶!今天我將以處理微博熱搜數據來示例如何使用Python批量處理文件夾中的文件,主要將涉及:

          • Python批量讀取不同文件夾(???)

          • Pandas數據處理(??)

          • Python操作Markdown文件(?)

          需求分析

          首先來說明一下需要完成的任務,下面是我們的文件夾結構

          因為微博歷史熱搜是沒有辦法去爬的,所以只能寫一個爬蟲每天定時爬取熱搜并保存,所以在我當時分析數據時使用的就是上圖展示的數據,每天的數據以套娃形式被保存在三級目錄下,并且熱搜是以markdown文件存儲的,打開是這樣?

          而我要做的就是將這三個月的微博熱搜數據處理成這樣?

          這困難嗎,手動的話無非是依次點三下進入每天的數據文件夾再打開md文件手動復制粘貼進Excel,不就幾萬條數據,大不了一天不吃飯也能搞定!現在我們來看看如何用Python光速處理。

          Python實現

          在操作之前我們來思考一下如何使用Python實現,其實和手動的過程類似:先讀取全部文件,再對每一天的數據處理、保存。所以第一步就是將我們需要的全部文件路徑提取出來,首先導入相關庫

          import?pandas?as?pd
          import?os
          import?glob
          from?pathlib?import?Path

          讀取全部文件名的方法有很多比如使用OS模塊

          但是由于我們是多層文件夾,使用OS模塊只能一層一層讀取,要寫多個循環(huán)從而效率不高,所以我們告別os.path使用Pathlib來操作,三行代碼就能搞定,看注釋
          from?pathlib?import?Path
          ?
          p?=?Path("/Users/liuhuanshuo/Desktop/熱搜數據/")?#初始化構造Path對象

          FileList=list(p.glob("**/*.md"))?#得到所有的markdown文件

          來看下結果

          成功讀取了熱搜數據下多層文件夾中的全部md文件!但是新的問題來了,每天有兩條熱搜匯總,一個11點一個23點,考慮到會有重合數據所以我們在處理之前先進行去重,而這就簡單了,不管使用正則表達式還是按照奇偶位置提取都行,這里我是用lambda表達式一行代碼搞定

          filelist?=?list(filter(lambda?x:?str(x).find("23點")?>=?0,?FileList))

          現在我們每天就只剩下23點的熱搜數據,雖然是markdown文件,但是Python依舊能夠輕松處理,我們打開其中一個來看看

          打開方式和其他文件類似使用with語句,返回一個list,但是這個list并不能直接為我們所用,第一個元素包含時間,后面每天的熱搜和熱度也不是直接存儲,含有markdown語法中的一些沒用的符號和換行符,而清洗這些數據就是常規(guī)操作了,使用下面的代碼即可,主要就是使用正則表達式,看注釋
          with?open(file)?as?f:
          ????lines?=?f.readlines()
          ????lines?=?[i.strip()?for?i?in?lines]?#去除空字符
          ????data?=?list(filter(None,?lines))
          ????del?data[0]
          ????data?=?data[0:100]
          ????date?=?re.findall('年(.+)2',str(file))[0]
          ????content?=?data[::2]?#奇偶分割
          ????rank?=?data[1::2]
          ????????#提取內容與排名
          ????for?i?in?range(len(content)):
          ????????????content[i]?=?re.findall('、(.+)',content[i])[0]
          ????for?i?in?range(len(rank)):
          ????????????rank[i]?=?re.findall('?(.+)',rank[i])[0]

          最后只需要寫一個循環(huán)遍歷每一天的文件并進行清洗,再創(chuàng)建一個DataFrame用于存儲每天的數據即可

          可以看到,并沒有使用太復雜的代碼就成功實現了我們的需求!

          結束語

          以上就是使用Python再一次解放雙手并成功偷懶的案例,可能讀取Markdown文件在你的日常工作中并用不到,但是通過本案例希望你能學會如何批量處理文件夾,批量讀取清洗數據。更重要的是在你的工作學習中,遇到需要重復操作的任務時,是否能夠想起使用Python來自動化解決!拜拜,我們下個案例見~


          注1: 本文使用的數據與源碼可在后臺回復0806獲取

          注2: 以上代碼需在Python3環(huán)境下運行


          ——End——

          后臺回復關鍵字:1024,獲取一份精心整理的技術干貨
          后臺回復關鍵字:進群,帶你進入高手如云的交流群。
          推薦閱讀

          這是一個能學到技術的公眾號,歡迎關注
          點擊「閱讀原文」了解SQL訓練營

          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天草精品| 激情婷婷视频 | 看黄色片网站免费 | 亚洲黄色免费电影 | 中文字幕破解一区 |