Python は複数のサブフォルダーをループし、ファイル名の特性に基づいて異なる宛先フォルダーにファイルをコピーします

  この記事では、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

おすすめ

転載: blog.csdn.net/zhebushibiaoshifu/article/details/132332068