<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>

          10 行 Python 代碼自動清理電腦內重復文件,解放雙手!

          共 2057字,需瀏覽 5分鐘

           ·

          2020-08-27 20:55


          前言

          今天分享一個系統(tǒng)層面的自動化案例:

          「給定一個文件夾,使用 Python 檢查給定文件夾下有無文件重復,若存在重復則刪除」

          主要涉及的知識點有:

          • os?模塊綜合應用
          • glob?模塊綜合應用
          • 利用?filecmp?模塊比較兩個文件

          步驟分析

          該程序實現的邏輯可以具化為:

          遍歷獲取給定文件夾下的所有文件,然后通過嵌套循環(huán)兩兩比較文件是否相同,如果相同則刪除后者。

          實現問題的關鍵就變成了:

          如何判斷兩個文件是否相同?

          在這里我們可以使用?filecmp?模塊,來看看官方的介紹文檔:

          • filecmp.cmp(f1, f2, shallow=True)

          • 比較名為 f1 和 f2 的文件,如果它們似乎相等則返回?True,否則返回?False

          • 如果?shallow?為真,那么具有相同?os.stat()?簽名的文件將會被認為是相等的;否則,將比較文件的內容。

          所以可以這樣使用:

          #?假設x和y兩個文件是相同的
          print(filecmp.cmp(x,?y))
          #?True

          解決了這個問題,我們就可以開始寫代碼了!

          Python 實現

          導入需要的庫并設置目標文件夾路徑

          import?os
          import?glob
          import?filecmp

          dir_path?=?r'C:\\xxxx'

          接著遍歷獲取所有文件的絕對路徑,我們可以利用?glob?模塊的通配符結合?recursive?參數即可完成,代碼如下:

          for?file?in?glob.glob(path?+?'/**/*',?recursive=True):
          ????pass

          由于遍歷獲取每一個文件或者文件夾后,需要判斷是否是文件,如果是文件則可能將絕對路徑存放到列表中

          這里需要再完成兩個事情:

          1. 首先創(chuàng)建一個空列表,后面用?list.append(i)?添加文件路徑

          2. 接著利用?os.path.isfile(i)?判斷是否是文件,返回?True?則執(zhí)行添加元素的操作

          具體代碼如下:

          file_lst?=?[]

          for?i?in?glob.glob(dir_path?+?'/**/*',?recursive=True):
          ????if?os.path.isfile(i):
          ????????file_lst.append(i)

          上一步我們獲取了目標文件夾下的所有文件路徑,接下來就可以嵌套遍歷這個路徑列表,其中?filecmp.cmp?進行文件判斷,os.remove?進行文件刪除

          for?x?in?file_lst:
          ????for?y?in?file_lst:
          ????????if?x?!=?y:
          ????????????if?filecmp.cmp(x,?y):
          ????????????????os.remove(y)

          這里的代碼已經實現了大致邏輯,但有一個細節(jié)需要考慮到:有可能循環(huán)到文件已經被前面的判斷刪除了,導致?os.remove(file)?由于文件不存在而報錯

          因此,可以用?os.path.exists?對文件存在進行判斷,如下所示:

          for?x?in?file_lst:
          ????for?y?in?file_lst:
          ????????if?x?!=?y?and?os.path.exists(x)?and?os.path.exists(y):
          ????????????if?filecmp.cmp(x,?y):
          ????????????????os.remove(y)

          這樣,一個簡易的文件去重小程序就完成了

          完整代碼如下:

          import?os
          import?glob
          import?filecmp

          dir_path?=?r'C:\xxxx'

          file_lst?=?[]

          for?i?in?glob.glob(dir_path?+?'/**/*',?recursive=True):
          ????if?os.path.isfile(i):
          ????????file_lst.append(i)

          for?x?in?file_lst:
          ????for?y?in?file_lst:
          ????????if?x?!=?y?and?os.path.exists(x)?and?os.path.exists(y):
          ????????????if?filecmp.cmp(x,?y):
          ????????????????os.remove(y)

          寫在最后

          通過本文的 Python 自動化腳本制作過程,我們可以再次體會Python辦公自動化的強大

          今天的文章就到這里,原創(chuàng)不易,如果喜歡的話請給我一波三連支持吧(在看、轉發(fā)、留言)



          推薦閱讀


          帶你用 Python 實現自動化群控(入門篇)

          Python 自動化,Appium 憑什么使用 UiAutomator2?

          Python 自動化,Helium 憑什么取代 Selenium?




          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  免费成人黄色网址 | 在车上内射91视频 | 美女B站AⅤ电影 | 丁香五月婷婷网 | 免费啪啪网址 |