Python将多个文件夹内的文件按照文件名特征复制到不同目标路径

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

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

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

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

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

python 复制代码
# -*- 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个分幅)。

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

至此,大功告成。

相关推荐
lypzcgf17 小时前
Coze源码分析-资源库-创建知识库-后端源码-应用/领域/数据访问
后端·go·coze·coze源码分析·智能体平台·ai应用平台·agent平台
flysh0518 小时前
pyAutoGUI 模块主要功能介绍-(2)键盘功能
python·pyautogui
LaoZhangAI18 小时前
Google Gemini AI图片编辑完全指南:50+中英对照提示词与批量处理教程(2025年9月)
前端·后端
小枫编程18 小时前
Spring Boot 调度任务在分布式环境下的坑:任务重复执行与一致性保证
spring boot·分布式·后端
用户114818678948418 小时前
从零搭建 Vue3 + Nest.js 实时通信项目:4 种方案(短轮询 / 长轮询 / SSE/WebSocket)
前端·后端
LaoZhangAI18 小时前
Google Gemini Nano与Banana AI完整部署指南:2025年轻量级AI解决方案
前端·后端
强盛小灵通专卖员18 小时前
闪电科创 SCI专业辅导
python·深度强化学习·研究生·ei会议·导师·sci期刊
Java水解18 小时前
spring中的@SpringBootTest注解详解
spring boot·后端
似水流年流不尽思念18 小时前
Java线程状态转换的详细过程
后端
尚学教辅学习资料18 小时前
基于Spring Boot的家政服务管理系统+论文示例参考
java·spring boot·后端·java毕设