티스토리 뷰

반응형

1. 국립공원에 해당하는 도엽번호를 기준으로 토지피복지도를 추출하여 사용자가 원하는 폴더로 저장하는 코드

아래 그림같이 세분류 토지피복지도는 88,526개의 파일이다. 여기서 필요한 도엽을 추출하는 것은 시간적 낭비가 될 수 있다. 따라서 해당되는 도엽번호만 추출하면 효율적일 수 있다.

 

 

반응형

<전체코드>

사용하는 방법은

1. 세분류 토지피복지도 전체가 있는 src_folder, 

2. 원하는 도엽만을 저장하는 dst_folder,

3. 도엽번호가 저장된 CSV파일의 경로를 지정하면된다.

import os
import shutil
import csv

def read_target_filenames(csv_file_path):
    target_filenames = []
    with open(csv_file_path, mode='r', newline='') as csvfile:
        csvreader = csv.reader(csvfile)
        for row in csvreader:
            if row:  # ensure the row is not empty
                target_filenames.append(row[0])
    return target_filenames

def copy_matching_files(src_folder, dst_folder, target_filenames):
    # Create the destination folder if it does not exist
    if not os.path.exists(dst_folder):
        os.makedirs(dst_folder)
   
    # Create a set of target basenames for quick lookup
    target_basenames = {os.path.splitext(filename)[0] for filename in target_filenames}
   
    # Counter for copied .shp files
    shp_file_count = 0
   
    # Iterate over the files in the source folder
    for filename in os.listdir(src_folder):
        # Get the basename without extension
        basename = os.path.splitext(filename)[0]
       
        # Check if the basename is in the target list
        if basename in target_basenames:
            src_file_path = os.path.join(src_folder, filename)
            dst_file_path = os.path.join(dst_folder, filename)
            shutil.copy(src_file_path, dst_file_path)
            print(f"Copied {filename} to {dst_folder}")

            # Increment the counter if the file is a .shp file
            if filename.endswith('.shp'):
                shp_file_count += 1

    # Print the total number of .shp files copied
    print(f"Total number of .shp files copied: {shp_file_count}")            

# Example usage
src_folder = 'C:\\Users\\web1m\\Downloads\\k_data\\토지피복\\토지피복도(세분류)2021'
dst_folder = 'C:\\토지피복_2024\\팔공산_세분류_2021'
csv_file_path = 'C:\\토지피복_2024\\팔공산5k도엽_45개.csv'  # Path to the CSV file containing filenames

# Read target filenames from the CSV file
target_filenames = read_target_filenames(csv_file_path)

# Copy matching files
copy_matching_files(src_folder, dst_folder, target_filenames)
반응형
댓글