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

System:Ubuntu 22.04.1

Python Version:3.11.6

'''
按照文件夹名称的时间来获取需要的数据
适用于文件名中包含时间格式为%Y-%m-%d_%H的文件
目标文件夹命名方式为%Y%m%d%H_%Y%m%d%H  ,eg./2019010100_2019010900
'''
import os
import pandas as pd
from datetime import datetime
import shutil
import re

#按照一定的时间间隔,创建一个时间段内的时间列表
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(origin_dir, target_dir, date_range,file_prefix):
    files = os.listdir(origin_dir)
    for file in files:
        if file_prefix in file and re.search(r'(\d{4}-\d{2}-\d{2}_\d{2})', file).group(1) in date_range:  #查找文件名中的时间,eg.2019-01-01_00
            original_file = os.path.join(origin_dir, file)
            new_file = os.path.join(target_dir, file)
            shutil.copyfile(original_file, new_file)
            print(f"File {file} copied to {target_dir}")

#将特定文件分别复制到 有多个包含时间的文件夹中
def process_files_in_directory(target_dir, origin_dir,file_prefix):
    #路径末尾为时间,以‘_’分割起止时间
    if '_' in os.path.basename(target_dir):
        target_file=target_dir
        file=os.path.basename(target_dir)
        dates = generate_dates_from_filename(file)
        copy_files_for_date_range(origin_dir, target_file, dates,file_prefix)
    #路径为时间文件夹的上一层目录
    else :
        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(origin_dir, target_file, dates,file_prefix)

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


target_dir = '/2019010100_2019010900'#需要复制到的目标路径
origin_dir = '/2019/01'#所有文件路径
file_prefix=''#文件的前缀
process_files_in_directory(target_dir, origin_dir,file_prefix)
#delete_files(origin_dir)#删除原始目录下的相应文件

 

posted @   IsYuh  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示