Python依據(jù)文件名稱將大量文件復(fù)制到不同文件夾的方法

??本文介紹基于Python語言,針對一個文件夾下的大量柵格遙感影像文件,基于其各自的文件名,分別創(chuàng)建指定名稱的新文件夾,并將對應(yīng)的柵格遙感影像文件復(fù)制到不同的新文件夾下的方法。

??首先,我們來看一下本文需要實(shí)現(xiàn)的需求。現(xiàn)有一個文件夾,其中有大量.tif格式的柵格遙感影像文件,以及.xmlovr等格式的遙感影像輔助信息文件,如下圖所示。

??其中,如上圖中紫色框所示,每一景遙感影像文件的文件名稱中,都有一個表示其編號的字段;我們希望基于這一編號字段,將帶有相同編號字段的柵格遙感影像文件,以及其對應(yīng)的輔助信息文件,都復(fù)制到一個結(jié)果文件夾中;這個結(jié)果文件夾如下圖所示。

??其中,結(jié)果文件夾內(nèi)含有多個不同編號子文件夾,這個編號就是上上圖中,柵格遙感影像所帶有的編號。例如,我們希望將所有文件名稱中帶有15字段的柵格遙感影像文件及其輔助信息文件,都復(fù)制到結(jié)果文件夾中名稱為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是存儲有原有待復(fù)制遙感影像文件的文件夾,result_file_path則表示最終的結(jié)果文件夾。

??代碼的整體思路也非常簡單。首先,我們需要導(dǎo)入osreshutil3Python庫,分別實(shí)現(xiàn)系統(tǒng)文件遍歷、字符串匹配與遙感影像文件的復(fù)制。其次,我們通過os.listdir()函數(shù),遍歷待復(fù)制遙感影像文件對應(yīng)的文件夾,獲取其中的每一個文件;這里的文件既包括.tif格式的柵格遙感影像文件,同時也包括.xml、ovr等格式的遙感影像輔助信息文件。

??隨后,對每一個文件加以處理。我們基于每一個文件的文件名稱的規(guī)則,通過split()函數(shù),將其中表示編號的字段以及這一字段之后的內(nèi)容提取出來;緊接著,基于re.findall()函數(shù),通過字符串匹配的方式,將表示編號的字段(也就是文件名稱中的數(shù)字部分)提取出來。

??接下來,知道了當(dāng)前文件對應(yīng)的編號,我們就可以開始復(fù)制工作。但是這里需要注意,由于我們需要將每一個文件都放入結(jié)果文件夾中的子文件夾,因此需要首先判斷當(dāng)前子文件夾有沒有被建立;如果沒有創(chuàng)建的話,我們需要創(chuàng)建一下這個子文件夾。這一步驟通過if判斷語句及其內(nèi)部的代碼即可實(shí)現(xiàn)——通過os.path.exists()函數(shù)判斷是否存在指定的子文件夾,如果不存在的話就新建這一子文件夾。

??隨后,就可以開始文件的復(fù)制工作了。這一步驟我們通過shutil.copy()函數(shù)即可實(shí)現(xiàn)。

??運(yùn)行上述代碼后,我們即可在結(jié)果文件夾中看到各個編號對應(yīng)的子文件夾,并在子文件夾中看到這一編號對應(yīng)的全部文件。如下圖所示,可以看到結(jié)果文件夾中,名稱為15子文件夾內(nèi),包含的就是文件名稱中帶有15字段的所有遙感影像文件及其對應(yīng)的輔助信息文件。

??至此,大功告成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容