<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,3天實(shí)現(xiàn)文件系統(tǒng)自動“瘦身”!

          共 5359字,需瀏覽 11分鐘

           ·

          2021-05-09 13:40

          點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號

          重磅干貨,第一時間送達(dá)

          文章轉(zhuǎn)載:Python編程
          許多人花上數(shù)小時點(diǎn)擊鼠標(biāo)和敲打鍵盤,執(zhí)行重復(fù)的任務(wù),卻沒有意識到,如果他們給機(jī)器正確的指令,機(jī)器就能在幾秒鐘內(nèi)完成他們的工作。 

          作為一種解釋型、具有豐富的高級語言特性、跨平臺又簡單易用的編程語言,Python能幫我們做的,遠(yuǎn)不止是在工作中完成正式項(xiàng)目的任務(wù),更能幫我們解決日常生活中一些瑣碎的“小事”——讓繁瑣工作自動化,不但大大節(jié)省精力和時間,還能呈數(shù)量級地提高工作效率,談笑間,讓瑣事“灰飛煙滅”。
          自動化的雙層含義
          提起自動化,往往包含兩層含義,其中一層,是通過編寫代碼,自動完成解決問題需要的整個或部分流程,把多個步驟“封裝”或“固化”成一段代碼,一次運(yùn)行,節(jié)省多道手工手續(xù),省力;另外一層,則是通過定期或不定期代碼的重復(fù)執(zhí)行,節(jié)省不必要的重復(fù)、瑣碎、或常規(guī)化操作,所謂“一次編寫,處處運(yùn)行”,省心。
          兩個層面結(jié)合,就能事半功倍、省心省力、準(zhǔn)確高效地解決各種日常任務(wù)。而這,也恰恰是編程思維非常重要的一個方面。

          我們?nèi)粘9ぷ髦忻鎸Φ暮芏嗍聝?,。就拿我們?nèi)粘N募到y(tǒng)維護(hù)這件小事來說,手動批量重命名文件、定期備份、文件自動分組這些小事,手動完成太繁瑣,自己花點(diǎn)時間寫個小程序,輕松就能搞定,不僅省時省力,還有背后那份喜悅和成就感,是難以言表的。
          有人提問:用 python 進(jìn)行辦公自動化都需要學(xué)習(xí)什么知識呢?這可能是很多非 IT 職場人士面臨的困惑,想把 python 用到工作中,卻不知如何下手?python 在自動化辦公領(lǐng)域越來越受歡迎,批量處理簡直是加班族的福音。
          自動化辦公無非是 excel、ppt、word、郵件、文件處理、數(shù)據(jù)分析處理、爬蟲這些,接下來,我們通過具體例子,看看Python是如何幫文件系統(tǒng)“瘦身”的。

          一、瘦身計劃——自動刪除久未訪問的文件

          你是不是也有這樣一個叫“download”或“temp”的文件夾,里面多是從網(wǎng)上下載的各類文件,還有別人發(fā)給你的文檔,時間一長,里面的文件就是一堆,看著心煩。其中有些文件可能挺重要,隔三差五能用到,而有些可能永遠(yuǎn)都不會再用到,而且用不到的往往是大多數(shù)。最簡單的“瘦身”方案,就是刪除那些沒必要保留的文件,怎么判斷呢?在文件系統(tǒng)里,每個文件都會保存最后訪問時間的信息,記錄著你最后一次用到這個文件的具體時間,根據(jù)這個時間,我們很容易判斷一個文件是不是已經(jīng)被“打入冷宮”、可以放心清除了。這事兒手動完成很容易,但文件一多,你肯定會覺得無聊,尤其是文件成百上千的時候,絕對讓人抓狂。這時候,就可以用Python代碼實(shí)現(xiàn)自動化來幫忙了。python 在處理批量操作有得天獨(dú)厚的優(yōu)勢,成千上萬的文件修改可能只需幾秒的時間。
          把問題分解一下,要做的基本上就是三件事:遍歷文件夾下所有文件、篩選出最后訪問日期早于某個時間點(diǎn)的文件、刪除篩出的老文件。先在命令行打開Python交互界面:
          $ Python
          文件遍歷、最近訪問日期的獲取和文件刪除操作,都要用到Python的“os”模塊,獲取當(dāng)前時間要用到“time”模塊。所以先加載“time”和“os”這兩個模塊:
          >>> import time>>> import os
          用time.time()獲取現(xiàn)在時間,計算可以接受的最老的文件被訪問時間old_threshold,這里定為30天之前:
          >>> time_now = time.time()>>> time_threshold = time_now - 30 * 24 * 60 * 60
          接下來,確定要清理的目錄,通過os.listdir()獲取該目錄下所有文件、子目錄的列表,保存到files:
          >>> path = "/Users/guest/Downloads">>> files = os.listdir(path)
          接下來,遍歷files,用os.path.join()得到當(dāng)前遍歷項(xiàng)的絕對路徑,用os.path.isdir()檢查每一項(xiàng)是文件還是目錄:如果是目錄,則直接忽略,如果是文件,則用os.stat()檢查它上次被訪問的時間——如果最后訪問時間在過去30天內(nèi),則直接忽略,超出的用os.remove()刪除文件:
          >>> for file_name in files:...     file_pathname = os.path.join(path, file_name)...     if not os.path.isdir(file_pathname):...         access_time = os.stat(file_pathname).st_atime...         if access_time < old_threshold:...             os.remove(file_name)...             print('Removed: ' + file_name)
          無論何時運(yùn)行以上代碼,都會方便地檢查目錄、刪除過期文件。
          注意:用os.remove()刪除的文件,不會進(jìn)入回收站,因此務(wù)必小心,調(diào)試時可先把os.remove(file_name)注釋掉,并及時備份,防止意外刪除造成損失。

          二、一目了然—將文件按類型組織到對應(yīng)子目錄下

          老文件清除了,要是文件依然很多,該怎么辦呢?一種簡單的策略,就是“分而治之”, 具體的功能很簡單,給定一個打算整理的文件夾目錄,這個腳本可以將該目錄下的所有文件都揪出來,并且根據(jù)后綴名歸類到不同的文件夾里,這簡直是整理愛好者的福音。把不同類型的文件移到專門的文件夾里,比如把擴(kuò)展名為“.mp4”和“.mkv”的文件移動到“movie”子目錄,把擴(kuò)展名為“.png”、“.jpg”的文件移動到“image”子目錄,等等,以后再找文件就能快速定位了,目錄看起來也清爽許多。

          首先,還是把問題分解一下,要做的也是三件事:遍歷文件夾下所有文件、根據(jù)文件擴(kuò)展名判斷文件類型、根據(jù)文件類型將文件移動到對應(yīng)子目錄(子目錄不存在則需要創(chuàng)建子目錄)。先在命令行打開Python交互界面:

          $ Python

          文件遍歷和路徑操作仍要用到“os”模塊,文件移動操作要用到“shutil”模塊,先加載這兩個模塊:

          >>> import os>>> import shutil

          設(shè)定要清理的目錄,通過os.listdir()獲取該目錄下所有項(xiàng)目,保存到files:

          >>> path = "/Users/guest/Download">>> files = os.listdir(path)

          遍歷files,用os.path.isdir()檢查每一項(xiàng)是文件還是目錄:如果是目錄,則直接忽略,如果是文件,則用.endswith()檢查文件名后綴,據(jù)此判斷文件類別img_class,如果類別檢出成功,則用shutil.move()將該文件移動到類別對應(yīng)的子目錄下,如果該子目錄不存在則用os.makedirs()創(chuàng)建目錄:

          >>> for file_name in files:...    file_pathname = os.path.join(path, file_name)...    img_class = ''...    if not os.path.isdir(file_pathname):...   if file_name.endswith('.jpg') or file_name.endswith('.png'):...   img_class = 'image'...   elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):...   img_class = 'movie'...   if img_class:...   target_path = os.path.join(path, img_class)...   if not os.path.isdir(target_path):...   os.makedirs(target_path)...   shutil.move(file_pathname, os.path.join(target_path, file_name))

          運(yùn)行完成,會看到各類文件已經(jīng)被移動到對應(yīng)子目錄下。這里如果不對子目錄是否存在進(jìn)行判斷就貿(mào)然移動文件,可能會觸發(fā)目錄不存在的異常。

          三、解放雙手——Python程序的自動調(diào)度

          通過以上兩段代碼,我們已經(jīng)實(shí)現(xiàn)了自動化的系統(tǒng)簡單清理,雖然每次運(yùn)行沒問題,但還是需要我們手動執(zhí)行——能不能一勞永逸,徹底不用管它實(shí)現(xiàn)完全自動化呢?答案是肯定的。最簡單的方案,就是用crontab安排Python腳本在特定時間周期性執(zhí)行。crontab是老牌的定時任務(wù)管理工具,會按照設(shè)定的周期、指定的時間執(zhí)行特定應(yīng)用。為了使用crontab,首先需要將之前的Python代碼整合成一個Python腳本文件,取名為system_cleaner.py:
          import timeimport osimport shutiltime_now= time.time()
          old_threshold = time_now - 30 * 24 * 60 * 60path = "/Users/guest/Download"
          files = os.listdir(path)for file_name in files:file_pathname = os.path.join(path, file_name)img_class = ''if not os.path.isdir(file_pathname):access_time = os.stat(file_pathname).st_atimeif access_time < old_threshold:os.remove(file_name)print(file_name + ' removed')else:if file_name.endswith('.jpg') or file_name.endswith('.png'):img_class = 'image'elif file_name.endswith('.mp4') or file_name.endswith('.mkv'): img_class = 'movie'if img_class: target_path = os.path.join(path, img_class) if not os.path.isdir(target_path): os.makedirs(target_path) shutil.move(file_pathname, os.path.join(target_path, file_name
          在終端中鍵入以下命令,在編輯模式打開crontab:
          $ crontab -e
          在文件底部鍵入這行內(nèi)容:
          0 0 * * 0 python system_cleaner.py
          這行內(nèi)容設(shè)定了要求crontab如何自動執(zhí)行我們的腳本。其中第一項(xiàng)是幾分,范圍是0-59;第二項(xiàng)是幾點(diǎn),范圍是0-23;第三項(xiàng)是幾號,范圍是1-31;第四項(xiàng)是幾月,范圍是1-12;第五項(xiàng)是星期幾,范圍是0-6,0表示星期天。這里的“*”是通配符,表示任意值都可以。所以,這一行最前面的“0 0 * * 0”表示我們希望在每周日00:00調(diào)度運(yùn)行名為system_cleaner.py的Python腳本,怎么樣,很簡單吧?
          自動化可以幫我們節(jié)省大量精力和時間、提高工作效率,讓生活變得更加輕松,這里,我們只是舉了一個非常簡單的文件自動清理的例子,你完全可以用相同的思路和知識來自動化其他瑣碎的日常任務(wù)。具體做什么不重要,重要的是通過Python腳本讓繁瑣工作自動化的思路,希望能對你有所幫助,人生苦短,我用python!

          國產(chǎn)小眾瀏覽器因屏蔽視頻廣告,被索賠100萬(后續(xù))

          年輕人“不講武德”:因看黃片上癮,把網(wǎng)站和786名女主播起訴了

          中國聯(lián)通官網(wǎng)被發(fā)現(xiàn)含木馬腳本,可向用戶推廣色情APP

          張一鳴:每個逆襲的年輕人,都具備的底層能力


          關(guān)


          ,學(xué),西學(xué)學(xué)運(yùn)護(hù),質(zhì),結(jié),關(guān)[],學(xué)習(xí)進(jìn)!


          瀏覽 27
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  99精品视频在线观看 | 777国产盗摄偷窥精品0000 | 又黄又爽的网站 | 久久E6热在线观看 | 国产精品久久综合色 |