Python實(shí)現(xiàn)遍歷子文件夾并將文件復(fù)制到不同的目標(biāo)文件夾
本文介紹基于Python語(yǔ)言,遍歷一個(gè)大文件夾中大量的子文件夾,并將每一個(gè)子文件夾中大量的文件,按照每一個(gè)文件的文件名稱的特點(diǎn)與差異,自動(dòng)創(chuàng)建多個(gè)目標(biāo)文件夾,并將指定文件復(fù)制到不同的目標(biāo)文件夾中的方法。
首先,我們來(lái)明確一下本文的需求。現(xiàn)在有一個(gè)大文件夾,其中具有多個(gè)表示年份的子文件夾,每一個(gè)子文件夾對(duì)應(yīng)一個(gè)年份;如下圖所示。

其次,在每一個(gè)表示年份的子文件夾中,同樣具有著大量的子文件夾,此時(shí)每一個(gè)子文件夾都表示一個(gè)天數(shù);以上圖中的 2018 文件夾為例,將其打開后,如下圖所示。

隨后,每一個(gè)表示天數(shù)的子文件夾中,就是我們希望加以提取、復(fù)制的文件了(在本中,就是一些 .tif 格式的遙感影像文件;如果大家需要復(fù)制其他格式的文件,思路和本文也都是一致的);我們以 2018 文件夾中的 001 子文件夾為例,將其打開后如下圖所示。但是,這些文件自身還有一定特征——首先,如下圖左側(cè)綠色框內(nèi)的部分所示,這些遙感影像文件來(lái)自不同的分幅,而這一部分的文字就是表示了他的分幅;我們希望,將同一個(gè)分幅的所有遙感影像文件在后期復(fù)制到同一個(gè)文件夾內(nèi)(比如所有名稱帶有 50TMK 字樣的遙感影像文件,都放在名稱為 50TMK 的目標(biāo)文件夾中);其次,那些以 _QC.tif 字段結(jié)尾的遙感影像我們都不需要,無(wú)需復(fù)制,只復(fù)制不帶 _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_folder 和 target_folder 分別指定了源文件夾(就是存放有原始遙感影像文件的大文件夾)和目標(biāo)文件夾(也就是我們希望將遙感影像復(fù)制到的結(jié)果文件夾)的路徑。
隨后,我們通過(guò) for year_folder in os.listdir(source_folder): 遍歷源文件夾中,表示年份的子文件夾。其后的 year_path = os.path.join(source_folder, year_folder) 用來(lái)生成年份子文件夾的完整路徑。同時(shí)可以通過(guò)一個(gè) if 語(yǔ)句來(lái)加以判斷——如果當(dāng)前路徑不是文件夾,則跳過(guò)本次循環(huán)。隨后,通過(guò)類似的方式,遍歷當(dāng)前年份子文件夾中的天數(shù)子文件夾。
接下來(lái),就可以通過(guò) for image_file in os.listdir(day_path): 來(lái)遍歷當(dāng)前天數(shù)子文件夾中的文件。在這里,我們需要加以判斷——如果文件名以 NDVI.tif 結(jié)尾,表示這是我們想要的遙感影像文件。
其次, index = image_file[-25 : -20] 則是用來(lái)從文件名中提取索引,這個(gè)索引就是遙感影像的分幅,我們將其提取出來(lái),用來(lái)構(gòu)建不同分幅對(duì)應(yīng)的目標(biāo)文件夾。其后面的一個(gè)判斷 if not os.path.isdir(os.path.join(target_folder, index)): ,就是檢查每一個(gè)遙感影像的分幅,如果這一分幅對(duì)應(yīng)的目標(biāo)路徑不存在,創(chuàng)建對(duì)應(yīng)的目錄結(jié)構(gòu)。
最后,我們使用 shutil 庫(kù)的 copy 函數(shù),將遙感影像文件復(fù)制到對(duì)應(yīng)的目標(biāo)路徑內(nèi)。
運(yùn)行上述代碼,我們即可在目標(biāo)文件夾中,首先看到每一個(gè)分幅的對(duì)應(yīng)的子文件夾,如下圖所示(我這里就是只有 4 個(gè)分幅)。

而在每一個(gè)分幅子文件夾內(nèi),所有遙感影像都是這一分幅對(duì)應(yīng)的文件,如下圖所示。

至此,大功告成。
到此這篇關(guān)于Python實(shí)現(xiàn)遍歷子文件夾并將文件復(fù)制到不同的目標(biāo)文件夾的文章就介紹到這了,更多相關(guān)Python文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于OpenCV目標(biāo)跟蹤實(shí)現(xiàn)人員計(jì)數(shù)器
這篇文章主要介紹了如何利用Python OpenCV這兩者來(lái)創(chuàng)建更準(zhǔn)確的人員計(jì)數(shù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴快來(lái)跟隨小編學(xué)習(xí)一下吧2022-03-03
Python如何利用opencv實(shí)現(xiàn)手勢(shì)識(shí)別
這篇文章主要介紹了Python如何利用opencv實(shí)現(xiàn)手勢(shì)識(shí)別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙可以參考一下2022-05-05
Python實(shí)現(xiàn)項(xiàng)目打包部署Linux服務(wù)器運(yùn)行方式
文章主要介紹了Python項(xiàng)目的打包和部署,包括使用buildout打包和docker容器化部署,打包可生成exe文件或安裝包,部署可直接部署或使用docker,文中詳細(xì)介紹了每個(gè)步驟的實(shí)現(xiàn)方法和相關(guān)命令2026-04-04
python代碼實(shí)現(xiàn)煙花實(shí)例
這篇文章主要給大家分享了python煙花詳細(xì)的代碼,文章主要以python煙花的代碼展開全文,所以解說(shuō)會(huì)比較少,代碼較多。喜歡的小伙伴可以參考一下,希望對(duì)你有所幫助2021-12-12
python網(wǎng)絡(luò)爬蟲精解之正則表達(dá)式的使用說(shuō)明
正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯2021-09-09
python-sys.stdout作為默認(rèn)函數(shù)參數(shù)的實(shí)現(xiàn)
今天小編就為大家分享一篇 python-sys.stdout作為默認(rèn)函數(shù)參數(shù)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python學(xué)習(xí)筆記之open()函數(shù)打開文件路徑報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了Python學(xué)習(xí)筆記之open()函數(shù)打開文件路徑報(bào)錯(cuò)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

