小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python辦公自動(dòng)化|批量處理文件,一學(xué)就會(huì)

 閑讀古書 2020-05-14

大家好,又到了Python辦公自動(dòng)化專題

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

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

  • Pandas數(shù)據(jù)處理(??)

  • Python操作Markdown文件(?)

需求分析

首先來說明一下需要完成的任務(wù),下面是我們的文件夾結(jié)構(gòu)

因?yàn)槲⒉v史熱搜是沒有辦法去爬的,所以只能寫一個(gè)爬蟲每天定時(shí)爬取熱搜并保存,所以在我當(dāng)時(shí)分析數(shù)據(jù)時(shí)使用的就是上圖展示的數(shù)據(jù),每天的數(shù)據(jù)以套娃形式被保存在三級(jí)目錄下,并且熱搜是以markdown文件存儲(chǔ)的,打開是這樣??

而我要做的就是將這三個(gè)月的微博熱搜數(shù)據(jù)處理成這樣??

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

Python實(shí)現(xiàn)

在操作之前我們來思考一下如何使用Python實(shí)現(xiàn),其實(shí)和手動(dòng)的過程類似:先讀取全部文件,再對(duì)每一天的數(shù)據(jù)處理、保存。所以第一步就是將我們需要的全部文件路徑提取出來,首先導(dǎo)入相關(guān)庫

  1. import pandas as pd
  2. import os
  3. import glob
  4. from pathlib import Path

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

但是由于我們是多層文件夾,使用OS模塊只能一層一層讀取,要寫多個(gè)循環(huán)從而效率不高,所以我們告別os.path使用Pathlib來操作,三行代碼就能搞定,看注釋

  1. from pathlib import Path
  2. p = Path("/Users/liuhuanshuo/Desktop/熱搜數(shù)據(jù)/") #初始化構(gòu)造Path對(duì)象
  3. FileList=list(p.glob("**/*.md")) #得到所有的markdown文件

來看下結(jié)果

成功讀取了熱搜數(shù)據(jù)下多層文件夾中的全部md文件!但是新的問題來了,每天有兩條熱搜匯總,一個(gè)11點(diǎn)一個(gè)23點(diǎn),考慮到會(huì)有重合數(shù)據(jù)所以我們?cè)谔幚碇跋?strong>進(jìn)行去重,而這就簡(jiǎn)單了,不管使用正則表達(dá)式還是按照奇偶位置提取都行,這里我是用lambda表達(dá)式一行代碼搞定

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

現(xiàn)在我們每天就只剩下23點(diǎn)的熱搜數(shù)據(jù),雖然是markdown文件,但是Python依舊能夠輕松處理,我們打開其中一個(gè)來看看

打開方式和其他文件類似使用with語句,返回一個(gè)list,但是這個(gè)list并不能直接為我們所用,第一個(gè)元素包含時(shí)間,后面每天的熱搜和熱度也不是直接存儲(chǔ),含有markdown語法中的一些沒用的符號(hào)和換行符,而清洗這些數(shù)據(jù)就是常規(guī)操作了,使用下面的代碼即可,主要就是使用正則表達(dá)式,看注釋

  1. with open(file) as f:
  2.     lines = f.readlines()
  3.     lines = [i.strip() for i in lines] #去除空字符
  4.     data = list(filter(None, lines))
  5.     del data[0]
  6.     data = data[0:100]
  7.     date = re.findall('年(.+)2',str(file))[0]
  8.     content = data[::2] #奇偶分割
  9.     rank = data[1::2]
  10.         #提取內(nèi)容與排名
  11.     for i in range(len(content)):
  12.             content[i] = re.findall('、(.+)',content[i])[0]
  13.     for i in range(len(rank)):
  14.             rank[i] = re.findall(' (.+)',rank[i])[0]

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

可以看到,并沒有使用太復(fù)雜的代碼就成功實(shí)現(xiàn)了我們的需求!

結(jié)束語

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

注1: 本文使用的數(shù)據(jù)與源碼可在早起Python獲取

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多