Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹

简介: Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹

  本文介绍基于Python语言,遍历一个大文件夹中大量的子文件夹,并将每一个子文件夹中大量的文件,按照每一个文件的文件名称的特点与差异,自动创建多个目标文件夹,并将指定文件复制到不同的目标文件夹中的方法。

  首先,我们来明确一下本文的需求。现在有一个大文件夹,其中具有多个表示年份子文件夹,每一个子文件夹对应一个年份;如下图所示。

  其次,在每一个表示年份子文件夹中,同样具有着大量的子文件夹,此时每一个子文件夹表示一个天数;以上图中的2018文件夹为例,将其打开后,如下图所示。

  随后,每一个表示天数子文件夹中,就是我们希望加以提取、复制的文件了(在本中,就是一些.tif格式的遥感影像文件;如果大家需要复制其他格式的文件,思路和本文也都是一致的);我们以2018文件夹中的001子文件夹为例,将其打开后如下图所示。但是,这些文件自身还有一定特征——首先,如下图左侧绿色框内的部分所示,这些遥感影像文件来自不同的分幅,而这一部分的文字就是表示了他的分幅;我们希望,将同一个分幅所有遥感影像文件在后期复制到同一个文件夹内(比如所有名称带有50TMK字样的遥感影像文件,都放在名称为50TMK的目标文件夹中);其次,那些以_QC.tif字段结尾的遥感影像我们都不需要,无需复制,只复制不带_QC字段的遥感影像文件即可。

  明确了需求,我们就可以开始代码的撰写。

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 17 00:14:16 2023
@author: fkxxgis
"""
import os
import shutil
source_folder = "F:/ers"
target_folder = "F:/Beijing_Preprocessing"
for year_folder in os.listdir(source_folder):
    year_path = os.path.join(source_folder, year_folder)
    if not os.path.isdir(year_path):
        continue
    for day_folder in os.listdir(year_path):
        day_path = os.path.join(year_path, day_folder)
        if not os.path.isdir(day_path):
            continue
        for image_file in os.listdir(day_path):
            if image_file.endswith("NDVI.tif"):
                index = image_file[-25 : -20]
                source_image_path = os.path.join(day_path, image_file)
                target_image_path = os.path.join(target_folder, index, image_file)
                if not os.path.isdir(os.path.join(target_folder, index)):
                    os.makedirs(os.path.join(target_folder, index))
                shutil.copy(source_image_path, target_image_path)
                print(year_folder, " ", day_folder)

  其中,source_foldertarget_folder分别指定了源文件夹(就是存放有原始遥感影像文件的大文件夹)和目标文件夹(也就是我们希望将遥感影像复制到的结果文件夹)的路径。

  随后,我们通过for year_folder in os.listdir(source_folder):遍历源文件夹中,表示年份的子文件夹。其后的year_path = os.path.join(source_folder, year_folder)用来生成年份子文件夹的完整路径。同时可以通过一个if语句来加以判断——如果当前路径不是文件夹,则跳过本次循环。随后,通过类似的方式,遍历当前年份子文件夹中的天数子文件夹。

  接下来,就可以通过for image_file in os.listdir(day_path):来遍历当前天数子文件夹中的文件。在这里,我们需要加以判断——如果文件名以 NDVI.tif结尾,表示这是我们想要的遥感影像文件。

  其次,index = image_file[-25 : -20]则是用来从文件名中提取索引,这个索引就是遥感影像的分幅,我们将其提取出来,用来构建不同分幅对应的目标文件夹。其后面的一个判断if not os.path.isdir(os.path.join(target_folder, index)):,就是检查每一个遥感影像的分幅,如果这一分幅对应的目标路径不存在,创建对应的目录结构。

  最后,我们使用shutil库的copy函数,将遥感影像文件复制到对应的目标路径内。

  运行上述代码,我们即可在目标文件夹中,首先看到每一个分幅的对应的子文件夹,如下图所示(我这里就是只有4个分幅)。

  而在每一个分幅子文件夹内,所有遥感影像都是这一分幅对应的文件,如下图所示。

  至此,大功告成。

欢迎关注:疯狂学习GIS

相关文章
|
19天前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
175 60
|
13天前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
18天前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
32 1
Python实用记录(十三):python脚本打包exe文件并运行
|
11天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
12天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
18天前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
29 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
18天前
|
Python
Python实用记录(十二):文件夹下所有文件重命名以及根据图片路径保存到新路径下保存
这篇文章介绍了如何使用Python脚本对TTK100_VOC数据集中的JPEGImages文件夹下的图片文件进行批量重命名,并将它们保存到指定的新路径。
31 0
python 读取 .csv/.xlsx/.xls 文件数据—批量修改文件名
python 读取 .csv/.xlsx/.xls 文件数据—批量修改文件名
|
Python
python 批量修改文件名
尚有欠缺,可以匹配正则。实现一个加强版的文件名修改神器
1644 0
|
SQL 数据挖掘 Python
【Python | 杂代码】利用 os 模块批量修改文件名
【Python | 杂代码】利用 os 模块批量修改文件名
340 0
【Python | 杂代码】利用 os 模块批量修改文件名