首页 > 编程语言 >Python结合文件名将文件复制到匹配的多个文件夹内

Python结合文件名将文件复制到匹配的多个文件夹内

时间:2023-08-23 21:00:56浏览次数:40  
标签:复制到 文件 Python 遥感 文件夹 file path os

   本文介绍基于Python语言,针对一个文件夹下的大量栅格遥感影像文件,基于其各自的文件名,分别创建指定名称的新文件夹,并将对应的栅格遥感影像文件复制到不同的新文件夹下的方法。

  首先,我们来看一下本文需要实现的需求。现有一个文件夹,其中有大量.tif格式的栅格遥感影像文件,以及.xmlovr等格式的遥感影像辅助信息文件,如下图所示。

  其中,如上图中紫色框所示,每一景遥感影像文件的文件名称中,都有一个表示其编号的字段;我们希望基于这一编号字段,将带有相同编号字段的栅格遥感影像文件,以及其对应的辅助信息文件,都复制到一个结果文件夹中;这个结果文件夹如下图所示。

  其中,结果文件夹内含有多个不同编号子文件夹,这个编号就是上上图中,栅格遥感影像所带有的编号。例如,我们希望将所有文件名称中带有15字段的栅格遥感影像文件及其辅助信息文件,都复制到结果文件夹中名称为15子文件夹中,以此类推。

  知道了具体需求,我们即可开始代码的撰写。本文所用到的代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Mon Feb 13 20:25:04 2023

@author: fkxxgis
"""

import os
import re
import shutil

tif_file_path = r"E:\02_Project\01_Chlorophyll\Fishnet\Result"
result_file_path = r"E:\02_Project\01_Chlorophyll\Fishnet\ResultFolder"

file_list = os.listdir(tif_file_path)
for file in file_list:
    file_id_suffix = file.split("_")[2]
    file_id = re.findall("\d+", file_id_suffix)[0]
    if not os.path.exists(os.path.join(result_file_path, file_id)):
        os.makedirs(os.path.join(result_file_path, file_id))
        print("Make " + file_id + " path.")
    shutil.copy(os.path.join(tif_file_path, file), os.path.join(result_file_path, file_id, file))

  其中,tif_file_path是存储有原有待复制遥感影像文件的文件夹,result_file_path则表示最终的结果文件夹。

  代码的整体思路也非常简单。首先,我们需要导入osreshutil3Python库,分别实现系统文件遍历、字符串匹配与遥感影像文件的复制。其次,我们通过os.listdir()函数,遍历待复制遥感影像文件对应的文件夹,获取其中的每一个文件;这里的文件既包括.tif格式的栅格遥感影像文件,同时也包括.xmlovr等格式的遥感影像辅助信息文件

  随后,对每一个文件加以处理。我们基于每一个文件的文件名称的规则,通过split()函数,将其中表示编号的字段以及这一字段之后的内容提取出来;紧接着,基于re.findall()函数,通过字符串匹配的方式,将表示编号的字段(也就是文件名称中的数字部分)提取出来。

  接下来,知道了当前文件对应的编号,我们就可以开始复制工作。但是这里需要注意,由于我们需要将每一个文件都放入结果文件夹中的子文件夹,因此需要首先判断当前子文件夹有没有被建立;如果没有创建的话,我们需要创建一下这个子文件夹。这一步骤通过if判断语句及其内部的代码即可实现——通过os.path.exists()函数判断是否存在指定的子文件夹,如果不存在的话就新建这一子文件夹。

  随后,就可以开始文件的复制工作了。这一步骤我们通过shutil.copy()函数即可实现。

  运行上述代码后,我们即可在结果文件夹中看到各个编号对应的子文件夹,并在子文件夹中看到这一编号对应的全部文件。如下图所示,可以看到结果文件夹中,名称为15子文件夹内,包含的就是文件名称中带有15字段的所有遥感影像文件及其对应的辅助信息文件

  至此,大功告成。

标签:复制到,文件,Python,遥感,文件夹,file,path,os
From: https://blog.51cto.com/fkxxgis/7207162

相关文章

  • python3_获得文件大小
    1、os.path.getsize(file_path),返回文件字节大小,int类型。importosfile_size=os.path.getsize('/home/pi/jodie/log/jodie-test.log')print(file_size,type(file_size))#947642<class'int'>#显示文件大小为:925kB2、os.stat(file_path).st_size,返回文件字......
  • python for循环
     格式:for变量in序列:执行的代码块 实例1:fruits=["apple","banana","cherry"]forfruitinfruits:print(fruit)      ......
  • python3_关于数字的一些操作记录
    1、数字整数、小数部分分离方法1:math模块提供的floor方法xs=num-math.floor(num)zs=num-xsreturn 'zhengShu: {0}, xiaoShu: {1}'.format(str(zs),str(xs))方法2:将浮点类型的数字转化为字符串zs,xs=str(num).split('.')return 'zhengShu: {0}, xiaoShu: {1}'.fo......
  • python+selenium+pytest-(3)_基本操作方法
    浏览器操作#浏览器实例化driver=webdriver.Chrome()#窗口最大化driver.maximize_window()#窗口最小化driver.miximize_window()#浏览器长、宽设置,单位:像素driver.set_window_size(100,200)#获取浏览器大小driver.get_window_size()#前进/后退/刷新driver.forwa......
  • python解释器的安装与多版本共存
    内容总结一、计算机内部存储的原理#计算机内部只认识01二进制因为计算机是基于电频工作的,电频是有高低之分的#存储单位比特位(bit)'''二进制的位数'''00000001000000018比特位=1字节(bytes)1024字节(bytes)=1KB1024KB=1MB1024MB=1GB1024GB=1TB...二、编程语......
  • Python
    Python知识长久的沉淀,源于不断的思考--尘风一、Python概述1.1Python简介学习任何东西之前都应该想明白,学的是什么?为什么去学?该如何去学?Python概念  Python是一门流行的编程语言,由"GuidovanRossum"吉多·范罗苏姆即龟叔于1989年创建,后于1991年发布。图标......
  • 小白python和pycharm安装大佬勿扰
    编程语言发展和Python安装计算机语言的发展机器语言1946年2月14日,世界上第一台计算机ENIAC诞生,使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差别极大,这种语言就称为机器语言。机器语言是第一代计算机语言。这种语言本质上是计算机能识......
  • 六种python读取语音文件的方法
    该文主要记录一下常用的python读取wav文件的常用三方库以及优缺点对比,以一段采样率16k,4.99秒单声道的测试语音为例子,音频文件读取后主要有以下几种形式#格式一:列表[-0.00015259-0.00021362-0.00021362-0.00027466-0.00015259]float32#格式二:列表[-5,-7,-7,-9,-5]int......
  • python 第二天
    编程语言的发展史编程语言的分类,Python的介绍,Python的版本问题首先我们了解了计算机内部数据存储是基于二进制的语言,了解它的存储单位其次我们对编程语言的发展史列出了三点①机器语言②汇编语言二者优势均在效率高速度快难度大③高级语言通过我们能理解的高级语言引出......
  • python的重载
    python是没有重载概念的,同名的函数,最后一次的定义会覆盖原有的定义。但是通过python强大的魔法函数,实现出与C++类似的重载效果。1、参数个数不同的情况这种情况下的重载,如果直接按照C++的形式编写,是不会生效的,结果会是最后一个三参数的实现覆盖了前两个实现。deffun(a):......