この記事では、Python言語に基づいて、大きなフォルダー内の多数のサブフォルダーを走査し、各サブフォルダー内の各ファイルの特性とファイル名の違いに基づいて複数のターゲット フォルダーを自動的に作成し、指定したファイルを別のフォルダーにコピーする方法を紹介します。宛先フォルダー。
まず、この記事の要件を明確にしましょう。これで、下の図に示すように、 years を表す複数のサブフォルダーを含む大きなフォルダーが作成され、各サブフォルダーは年に対応します。
第二に、年を表す各 サブフォルダには、多数のサブフォルダもあります。 このとき、各サブフォルダは日数を表します。上の図の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_folder
指定します。 。target_folder
次に、年を表すfor year_folder in os.listdir(source_folder):
ソース フォルダー内のサブフォルダーを繰り返し処理します。以下は、生成に使用された年のサブフォルダーへの完全パスです。同時に、ステートメントを通じて判断できます。現在のパスがフォルダーでない場合は、このループをスキップします。続いて、同様の方法で、現在の年のサブフォルダー 内のdaysサブフォルダーを反復処理します。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
ここにはフレームが 1 つだけあります)。
以下の図に示すように、 各フレームのサブフォルダー内では、すべてのリモート センシング画像がこのフレームに対応するファイルになります。
この時点で、作業は完了です。
フォロー歓迎: Crazy Learning GIS