本文介紹批次下載大量多時相的遙感影像檔案後,基於Python語言與每一景遙感影像檔案的檔名,對這些已下載的影像檔案加以缺失情況的核對,並自動統計、列出未下載影像所對應的時相的方法。
批次下載大量遙感影像檔案對於RS學生與從業人員可謂十分常見。在我們之前的文章中,就介紹過同樣基於檔名稱,對未成功下載的遙感影像加以統計,並自動篩選出未下載成功的遙感影像的下載連結的方法;在本文中,我們同樣基於Python與柵格檔案的檔名稱,對類似的需求加以實現。
首先,本文的需求和前述提及的文章略有不同。在這裡,我們已經下載好了大量的、以遙感資料成像時間為檔名的柵格檔案,如下圖所示。
其中,不難發現我們這裡的遙感影像資料是從每一年的001
天開始,每隔8
天生成一景影像,每一景影像的名稱後3
位數字就是001
、009
、017
這樣表示天數的格式;此外,前4
位數字表示年份,我們這裡有從2020
開始到2022
結束、一共3
年的遙感影像資料。
現在,我們希望對於上述檔案加以核對,看看在這3
年中,是否有未下載成功的遙感影像檔案;如果有的話,還希望輸出下載失敗的檔案個數和對應的檔名稱(也就是對應檔案的成像時間)。
明確了需求後,我們就可以開始具體的操作。首先,本文所需用到的程式碼如下。
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 30 23:32:54 2023
@author: fkxxgis
"""
import os
def check_missing_dates(folder_path):
start_year = 2020
end_year = 2022
days_per_file = 8
missing_dates = []
for year in range(start_year, end_year + 1):
for day in range(1, 366, days_per_file):
file_name = str(year) + "{:03d}".format(day) + ".tif"
file_path = os.path.join(folder_path, file_name)
if not os.path.exists(file_path):
missing_dates.append(file_name[:-4])
return missing_dates
folder_path = "F:/Data_Reflectance_Rec/NDVI"
missing_dates = check_missing_dates(folder_path)
print("Total missing dates:", len(missing_dates))
print("Missing dates:")
for date in missing_dates:
print(date)
這段程式碼整體思路也很明確。
首先,我們匯入所需的模組。在這裡,os
模組用於檔案路徑操作。
接下來,我們定義一個名為check_missing_dates
的函式,其接收一個資料夾路徑作為引數;這個函式用於檢查遺漏的日期。在這個函式中,我們定義了起始年份start_year
和結束年份end_year
,以及每個檔案之間的日期間隔 days_per_file
;隨後,建立一個空列表missing_dates
,用於儲存遺漏的日期。
隨後,我們使用巢狀的迴圈遍歷每一年和每一天。在每一天的迴圈中,構建檔名,如"2020017.tif"
,並構建檔案的完整路徑。接下來,使用os.path.exists()
函式檢查檔案路徑是否存在——如果檔案不存在,則將日期新增到遺漏日期列表missing_dates
中。在迴圈結束後,返回遺漏日期列表missing_dates
。
在函式外部,我們定義要檢查的資料夾路徑folder_path
,然後就可以呼叫check_missing_dates
函式,傳入資料夾路徑引數,執行日期檢查,將返回的遺漏日期列表賦值給missing_dates
。
最後,我們列印遺漏日期的總數len(missing_dates)
,並列印每個具體的遺漏日期。
執行上述程式碼,即可出現如下圖所示的結果。即在我這裡,目前有8
個日期的遙感影像檔案沒有下載成功,我們再對照這8
個遙感影像的日期,重新到相關網站中下載即可。
至此,大功告成。