Python은 여러 하위 폴더를 반복하고 파일 이름 특성에 따라 파일을 다른 대상 폴더에 복사합니다.

  이 글에서는 Python 언어를 기반으로 대용량 폴더 에 있는 다수의 하위 폴더를 순회하고 , 각 하위 폴더 에 있는 각 파일의 파일명 의 특성과 차이점을 기반으로 자동으로 여러 개의 대상 폴더를 생성하고 , 지정된 파일을 다른 폴더에 복사하는 방법을 소개합니다. 대상 폴더 .

  먼저 이 글의 요구사항을 명확히 해보자. 이제 아래 그림과 같이 연도를 나타내는 여러 하위 폴더가 있는 큰 폴더가 생겼으며 , 각 하위 폴더는 연도에 해당합니다.

둘째, 연도를 나타내는  하위 폴더 에는 수많은 하위 폴더 도 있습니다 . 이때 하위 폴더는 일 수를 나타냅니다 . 위 그림의 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): 소스 폴더의 하위 폴더를 반복합니다 . 다음은 이를 생성하는 데 사용된 연도 하위 폴더 의 전체 경로입니다. 동시에 명령문을 통해 판단할 수 있습니다 . 현재 경로가 폴더가 아닌 경우 이 루프를 건너뜁니다. 그런 다음 비슷한 방식으로 현재 연도 하위 폴더의 하위 폴더를 반복합니다.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여기에는 프레임이 하나만 있습니다 ).

아래 그림과 같이   각 프레임 하위 폴더 내에서 모든 원격탐사 이미지는 이 프레임에 해당하는 파일입니다.

  이제 모든 작업이 완료되었습니다.

팔로우를 환영합니다: Crazy Learning GIS

Supongo que te gusta

Origin blog.csdn.net/zhebushibiaoshifu/article/details/132332068
Recomendado
Clasificación