本文介绍批量下载大量多时相的遥感影像文件后,基于Python语言与每一景遥感影像文件的文件名,对这些已下载的影像文件加以缺失情况的核对,并自动统计、列出未下载影像所对应的时相的方法。

  批量下载大量遥感影像文件对于RS学生与从业人员可谓十分常见。在我们之前的文章中,就介绍过同样基于文件名称,对未成功下载的遥感影像加以统计,并自动筛选出未下载成功的遥感影像的下载链接的方法;在本文中,我们同样基于Python与栅格文件的文件名称,对类似的需求加以实现。

  首先,本文的需求和前述提及的文章略有不同。在这里,我们已经下载好了大量的、以遥感数据成像时间为文件名的栅格文件,如下图所示。

  其中,不难发现我们这里的遥感影像数据是从每一年的001天开始,每隔8天生成一景影像,每一景影像的名称后3位数字就是001009017这样表示天数的格式;此外,前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个遥感影像的日期,重新到相关网站中下载即可。

  至此,大功告成。

查找大量时序遥感文件缺失、不连贯的成像日期:Python代码的更多相关文章

  1. yum whatprovides 查找哪个包可以提供缺失的文件

    yum whatprovides 查找哪个包可以提供缺失的文件

  2. 使用SVN时出现的文件缺失问题

    使用SVN的童鞋们,可能有三种提交代码的方法: 第一种使用客户端(例如SVNX,CornerStone): 第二种使用Xcode提交(Source Control -> commit): 第三种 ...

  3. Linux查找最近修改的文件

    查找当前目录下.phtml文件中,最近30分钟内修改过的文件. find . -name 查找当前目录下.phtml文件中,最近30分钟内修改过的文件,的详细情况. find . -name -ls ...

  4. Visual Studio无法查找或打开 PDB 文件解决办法

    Visual Studio无法查找或打开 PDB 文件解决办法 用VS调试程序时,有时会在VS底部的“输出”框中提示“无法查找或打开 PDB 文件”.这该怎么解决呢? 下面,我们以VS2013为例,来 ...

  5. linux下的find文件查找命令与grep文件内容查找命令

    在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...

  6. VS2013 编译程序时提示 无法查找或打开 PDB 文件

    "Draw.exe"(Win32):  已加载"C:\Users\YC\Documents\Visual Studio 2013\Projects\Draw\Debug\ ...

  7. jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder

    jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder 1,下载工具地址:www.idesksoft.com/classfinder.html,如图: 2 ...

  8. 解决“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件问题

    这些提示的问题完全没有必要去理会,因为一般情况下你点击本地windows调试,会报出这样问题很正常. 网上一些介绍什么要去选项卡栏勾选window连接器什么鬼,不建议用该方式,一旦你勾选那个方式虽然不 ...

  9. vs2013运行c语言出现:无法查找或打开 PDB 文件。

    vs2013运行c语言出现:无法查找或打开 PDB 文件.    “ConsoleApplication1.exe”(Win32): 已加载“C:\Users\hp\Documents\Visual ...

  10. AndroidStudio中 R文件缺失的办法

    AndroidStudio中 R文件缺失 找不到R文件的原因有如下两类: 1:IDE或代码问题,非个人原因: 2:个人误操作导致IDE不予提示R文件: 下面是解决办法: 第一种 ①首先确保资源文件是否 ...

随机推荐

  1. 【Java,IDEA】使用IDEA自动生成序列化ID

    一.设置序列化的原因: 详细见SE的IO流问题: https://www.cnblogs.com/mindzone/p/12752453.html 简单点理解就是对象的身份证号, 对于一些对象被序列之 ...

  2. 【Layui】13 轮播 Carousel

    文档地址: https://www.layui.com/demo/carousel.html 基础轮播: <style> /* 为了区分效果 */ div[carousel-item]&g ...

  3. 什么是3D扫描技术?

    相关: https://www.bilibili.com/video/BV1fN4y1z7uD/?vd_source=f1d0f27367a99104c397918f0cf362b7 接触式:就是使用 ...

  4. 零基础学习人工智能—Python—Pytorch学习(二)

    前言 数学的学习跟数学的计算是要分开的,现在回头再去看大学的高数和线性代数,如果只是学习的话,其实一门课程3天,也就学完了. 学校的课程之所以上那么久,其实是为了考试,也就是为计算准备的.计算有意义的 ...

  5. 美化一下WPF自带得ToolTip

    对照一下原版和美化以后得版本 原版: ---------- 新版: 新增了 圆角 和 阴影效果; 第一步:新建项,最下面有一个自定义控件,取名为CornerToolTip. 第二步:系统会创建一个Co ...

  6. 暑假Java自学进度总结06

    一.今日所学: 1.for循环 for(初始化语句;条件判断语句;条件控制语句){ 循环体语句; } 执行流程: 1>执行初始化语句 2>执行条件判断语句,若为true则执行循环体语句,若 ...

  7. 有没有一个适合初学者学习的基于linux的嵌入式综合项目?

    一.前言 很多粉丝问我,有没有一个适合初学者学习的嵌入式的Linux的项目? 我之前陆陆续续写过一些适合新手的小项目: <从0写一个<电话号码管理系统>的C入门项目[适合初学者]&g ...

  8. C 语言编译过程

    编译过程 编译过程是将高级编程语言(如 C 语言)写成的源代码转换成机器可以执行的低级机器语言(通常是二进制代码)的过程.这个过程一般可以分为几个阶段: 预处理(Preprocessing): 预处理 ...

  9. wget 提示 "无法验证 xxxx.xxx 的由 “xxx” 颁发的证书: 无法本地校验颁发者的权限。"

    有一天在使用 wget 下载文件时,出现了无法验证证书的提示: $ wget https://github.com/zayronxio/Mkos-Big-Sur/releases/download/0 ...

  10. pikachu靶场 越权(水平越权+垂直越权)

    水平越权 A用户和B用户属于同一级别用户,但各自不能操作对方个人信息.A用户如果越权操作B用户个人信息的情况称为水行越权操作 三个用户 lucy/lili/kobe  密码都为123456 随便登录其 ...