Python基于已知的分幅条带号筛选出对应遥感影像文件的方法

简介: Python基于已知的分幅条带号筛选出对应遥感影像文件的方法

  本文介绍基于Python语言,结合已知研究区域中所覆盖的全部遥感影像分幅条带号,从大量的遥感影像文件中筛选落在这一研究区域中遥感影像文件的方法。

  首先,先来明确一下本文所需实现的需求。现已知一个研究区域(四川省),且已知覆盖这一研究区域所需的全部遥感影像的分幅条带号(这里就以Sentinel-2数据所采用的分幅规则为例来介绍),如下图所示。

  其中,矢量图层上的标签Label)就是所需的遥感影像的分幅条带号;且这一矢量要素的属性表中,有具体每一个分幅条带号的具体字段(如上图红色方框所示的那一列)。

  同时,我们还下载好了大量的遥感影像——这些遥感影像数量众多,既有位于这一研究区域内的遥感影像,同时还有位于研究区域外的。其中,这里所有的遥感影像都保存在一个大文件夹下,而这一大文件夹下还有多个子文件夹,具体遥感影像就存在于子文件夹中;如下图所示。

  其中,红色框内的文件夹即为前述“大文件夹”,紫色框内的每一个文件夹即为前述“子文件夹”。此外,每一个子文件夹的命名也是和遥感影像的分幅条带号对应的,比如43LCC这一个子文件夹就是保存了UTM编号为43的网格内的全部遥感影像。这里关于Sentinel-2遥感影像分幅条带号的介绍,如果大家有需要,可以参考哨兵2号Sentinel-2分幅条带介绍与MGRS网格矢量文件获取https://blog.csdn.net/zhebushibiaoshifu/article/details/128858277)这篇文章。

  同时,在每一个遥感影像文件文件名中,都有分幅条带号这一字段;例如,打开43LCC这一子文件夹,如下图所示。

  我们希望实现的,就是基于上图所示的研究区域内遥感影像的分幅条带号信息,在大量的遥感影像中筛选出这些分幅对应的遥感影像文件,并将其通过复制的方式放入到一个新的结果文件夹中。

  了解了具体需求,我们就可以开始代码的撰写。首先,本文所需的完整代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Fri Feb  3 18:33:11 2023
@author: fkxxgis
"""
import os
import xlrd
import shutil
xls_file = r"E:\02_Project\Sentinel.xls"
tif_path = r"G:\S2_CSI_LCC_product\LCC_10days_2020"
result_path = r"G:\Select"
book = xlrd.open_workbook(xls_file)
sh = book.sheet_by_index(0)
row_num = sh.nrows
for row in range(1, row_num):
    mgrs = sh.cell(row,6).value
    utm = mgrs[0:2]
    for root, dirs, files in os.walk(tif_path):
        for name in dirs:
            if name[0:2] == utm:
                for root_1, dirs_1, files_1 in os.walk(os.path.join(root, name)):
                    for name_1 in files_1:
                        if name_1.find(mgrs) != -1:
                            if not os.path.exists(os.path.join(result_path, mgrs)):
                                os.makedirs(os.path.join(result_path, mgrs))
                                print("Make " + mgrs + " path.")
                            shutil.copy(os.path.join(root, name, name_1), os.path.join(result_path, mgrs, name_1))

  其中,我们需要导入osxlrdshutil3Python库,分别实现系统文件遍历、Excel数据读取与研究区域内遥感影像数据的复制。其中,关于xlrd库的配置,如果大家是用的Anaconda环境,可以参考Anaconda环境Python中xlrd库的配置方法https://blog.csdn.net/zhebushibiaoshifu/article/details/128876456)这篇文章。此外,我们首先需要将本文开头提及的表示遥感影像数据分幅条带号的矢量文件的属性表导出(通过“System Toolboxes”→“Conversion Tools.tbx”→“Excel”→“Table To Excel”选项,如下图所示),保存为.xls格式的表格文件,从而方便我们后期代码对数据的读取。

  在代码中,xls_file表示我们将属性表导出后得到的.xls格式的表格文件,tif_path表示存放所有遥感影像的大文件夹,result_path则表示找到我们所需的结果遥感影像文件后,希望将其复制到的路径。

  随后,我们通过xlrd.open_workbook()函数打开.xls格式的表格文件,读取其中的数据并获取其行数row_num;接下来,我们即可对这一表格文件的单元格数据加以遍历,也就是代码中的第1for循环——我们从第2行开始(因为第1行是表头),读取每一行第7列的数据(也就是存放有遥感影像分幅条带号的那一列),从而依次获取所需的遥感影像条带号。

  接下来,由于遥感影像的分幅条带号的前两位,以及前述子文件夹名称的前两位,都是表示UTM编号的两位数字,因此我们通过utm = mgrs[0:2]这句代码,截取当前遥感影像分幅条带号的前两位,并通过os.walk()函数进行遍历,通过一个if判断语句找到大文件夹下对应的子文件夹;随后,在这一子文件夹中同样通过os.walk()函数,进行遥感影像文件的遍历——也就是代码中第2个、第3个、第4for循环所做的事情。

  接下来,针对遍历得到的子文件夹中每一个遥感影像文件,我们通过.find()函数找到所有满足这一分幅条带号的遥感影像文件,也就是代码中第5for循环与第2if判断语句的工作。找到符合当前分幅条带号的遥感影像文件后,我们即可开始将其复制到目标文件夹中。

  这里还有一个需求,因为我们这里保存的是多时相遥感影像数据(即每一个分幅条带号对应着多个不同时相的遥感影像文件),因此我们希望在目标文件夹中,同样用各个分幅条带号作为名称,创建多个子文件夹;然后将当前分幅条带号对应的全部遥感影像数据放入这一文件夹中。基于此,我们通过os.path.exists()函数判断是否存在指定的子文件夹,如果不存在的话就新建这一文件夹;随后,通过shutil.copy()函数复制这些遥感影像文件。

  运行上述代码,最终我们得到的结果如下图所示;其中,每一个子文件夹都表示一个分幅条带号,子文件夹内即为这一分幅条带号所对应的全部时相的遥感影像文件。

  至此,大功告成。

欢迎关注:疯狂学习GIS

相关文章
|
11天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
11天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
21天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
51 20
|
28天前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
69 21
|
26天前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
32 10
|
27天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
28天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
6月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
98 1
|
8月前
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
210 14

热门文章

最新文章

推荐镜像

更多