核對不同資料夾所含內容的差異並提取缺失內容:Python程式碼

疯狂学习GIS發表於2024-07-03

  本文介紹基於Python語言,以一個大資料夾作為標準,對另一個大資料夾所包含的子資料夾檔案加以查漏補缺,並將查漏補缺的結果輸出的方法。

  首先,來明確一下本文所需實現的具體需求。現有一個大資料夾,其中包含了大量子資料夾,如下圖所示。

image

  此外,我們還有另一個大資料夾,其中同樣包含了大量的子資料夾,如下圖所示;從上圖與下圖中的紫色框可以看出,這是兩個不一樣的大資料夾。但同時,我們還知道這兩個大資料夾中的子資料夾數量,以及每一個子資料夾的名稱,幾乎是完全一致的——但是下圖所示的大資料夾較之上圖,缺少了一些子資料夾

  我們現在希望實現的是,以第一幅圖所示的大資料夾為標準,對第二幅圖所示的大資料夾中的子資料夾加以查漏補缺,找出第二個大資料夾中缺少的子資料夾的名稱,以及缺少的子資料夾的數量。

  瞭解了具體需求,我們就可以開始程式碼的撰寫。這裡需要注意,本文比較的是兩個大資料夾子資料夾的差異;如果大家希望比較兩個大資料夾檔案的差異,整體思路也都是一樣的,也可以用本文提供的程式碼。

  本文所用到的具體程式碼如下所示。

# -*- coding: utf-8 -*-
"""
Created on Tue Feb 21 17:12:47 2023

@author: fkxxgis
"""

import os

template_folder = r"E:\02_Project\01_Chlorophyll\Fishnet\ResultFolder"
new_folder = r"E:\02_Project\01_Chlorophyll\Fishnet\ResultFolder_AI"

folder_list = os.listdir(template_folder)
new_list = os.listdir(new_folder)

num = 0
for folder in folder_list:
    if folder not in new_list:
        num += 1
        print(folder, "is not in new folder!")
print("\n", num, " folder(S) is(are) not in new folder!", sep = "")

  可以看到,程式碼整體也是非常簡單的。首先,template_folder是我們作為標準的大資料夾,也就是本文開頭第一幅圖所示的資料夾;而new_folder則是需要對其中子資料夾加以查漏補缺的大資料夾,也就是本文開頭第二幅圖所示的資料夾

  首先,介紹一下程式碼的整體思路。

  首先,我們基於os.listdir()函式,遍歷標準大資料夾中的每一個子資料夾,獲取每一個子資料夾的名稱,並將其存放在一個列表中;接下來,我們透過同樣的方式,獲取待查漏補缺的大資料夾中的子資料夾名稱,同樣存放在一個列表中。接下來,我們即可開始對比兩個大資料夾子資料夾的數量差異。首先,設定一個變數num,作為子資料夾數量差異的計算變數;隨後,透過一個for迴圈,依次取出標準大資料夾子資料夾的名稱,並在待查漏補缺的大資料夾對應的子資料夾名稱列表中加以搜尋;如果找不到當前名稱的子資料夾,說明在第二個大資料夾中就少了這一子資料夾,因此需要將其名稱輸出,並在變數num中增加1。完成上述迴圈後,我們即可獲得第二個大資料夾,也就是待查漏補缺的大資料夾中,所缺少的子資料夾的名稱以及其數量。

  其次,程式碼詳細的逐句介紹如下。

  第一部分,我們需要匯入所需的Python內建模組os,其用於與作業系統進行互動,在本文中就是進行讀取檔案列表等操作。

  隨後,我們指定了一個資料夾路徑,儲存在變數template_folder中;該資料夾是我們作為標準的大資料夾,即本文開頭第一幅圖所示的資料夾。接下來,我們繼續指定另一個資料夾路徑,儲存在變數new_folder中。該資料夾就是需要對其中子資料夾加以查漏補缺的大資料夾,也就是本文開頭第二幅圖所示的資料夾

  隨後,使用os.listdir()函式獲取作為標準的大資料夾中,所有的檔案和資料夾的列表,並將其儲存在變數folder_list中;同樣的方法,使用os.listdir()函式獲取另一個資料夾中的所有檔案和資料夾的列表,並將其儲存在變數new_list中。

  接下來,我們初始化一個變數num,用於計數在模板資料夾中存在,但在新資料夾中不存在的資料夾的數量。隨後,即可開始迴圈,遍歷模板資料夾中的每個資料夾,並使用條件判斷語句檢查這個資料夾是否存在於新資料夾中——如果資料夾不在新資料夾中,則執行以下操作:第一步,將變數num的值增加1,用於計數不存在於新資料夾中的資料夾的數量;第二步,列印當前資料夾的名稱,以及附加的文字資訊。

  最後,我們列印最終的結果,顯示不存在於新資料夾中的資料夾的數量。

  執行上述程式碼,將會得到如下所示的結果。

  程式碼非常簡單,到這裡就結束了;如果大家還有其他需求,可以自行再擴充程式碼。例如,如果希望將待查漏補缺的大資料夾中缺少的子資料夾複製過來,則可以參考文章Python結合檔名稱將多個檔案複製到不同路徑下中所提到的程式碼思路加以實現。

  至此,大功告成。

相關文章