按照文件夹时间提取或归类相应数据

发布时间 2024-01-12 17:07:46作者: IsYuh

System:Ubuntu 22.04.1

Python Version:3.11.6

'''
按照文件夹名称的时间来获取需要的数据
文件夹名称eg./home/yuh/WRFCHEM/WPS-4.5/1km/2019010100_2019010900
'''
import os
import pandas as pd
from datetime import datetime
import shutil

#按照一定的时间间隔,创建一个时间段内的时间列表
def generate_dates_from_filename(filename):
    start_time = datetime.strptime(filename.split('_')[0], '%Y%m%d%H').strftime('%Y-%m-%d')
    end_time = datetime.strptime(filename.split('_')[1], '%Y%m%d%H').strftime('%Y-%m-%d')
    return pd.date_range(start_time, end_time, freq='1H').strftime('%Y-%m-%d_%H')

#复制文件
def copy_files_for_date_range(met_dir, target_dir, date_range):
    met_files = os.listdir(met_dir)
    for met_file in met_files:
        if 'met_em' in met_file and met_file.split('.')[2].split(':')[0] in date_range:
            original_file = os.path.join(met_dir, met_file)
            new_file = os.path.join(target_dir, met_file)
            shutil.copyfile(original_file, new_file)
            print(f"File {met_file} copied to {target_dir}")

#将特定文件分别复制到 有多个包含时间的文件夹中
def process_files_in_directory(target_dir, met_dir):
    files = os.listdir(target_dir)
    for file in files:
        dates = generate_dates_from_filename(file)
        target_file=os.path.join(target_dir,file)
        copy_files_for_date_range(met_dir, target_file, dates)

#复制分类后删除原文件夹中的文件
def delete_files(met_dir):
    met_files = [f for f in os.listdir(met_dir) if f.startswith("met_em")]
    for met_file in met_files:
        file_path = os.path.join(met_dir, met_file)
        try:
            os.remove(file_path)
            print(f"File {met_file} deleted from {met_dir}")
        except Exception as e:
            print(f"Error deleting {met_file}: {e}")


target_dir = '/home/yuh/WRFCHEM/WPS-4.5/1km'
met_dir = '/home/yuh/WRFCHEM/WPS-4.5'
process_files_in_directory(target_dir, met_dir)
#delete_files(met_dir)#删除wps目录下met_em文件