from datetime import datetime, timedelta from utils.file.trans_methods import * def convert_and_calculate_time_range(time_str): # 解析原始字符串 date_part = time_str[:6] time_part = time_str[7:] # 将短日期格式转换为完整年份 year = '20' + date_part[:2] month = date_part[2:4] day = date_part[4:] hour = time_part[:2] minute = time_part[2:] # 创建 datetime 对象 base_time = datetime.datetime.strptime(f"{year}-{month}-{day} {hour}:{minute}", "%Y-%m-%d %H:%M") # 计算时间区间 start_time = base_time.replace(second=0, microsecond=0) - timedelta(minutes=2) end_time = base_time.replace(second=0, microsecond=0) + timedelta(minutes=3) return base_time.strftime("%Y-%m-%d %H:%M"), start_time.strftime("%Y-%m-%d %H:%M:%S"), end_time.strftime( "%Y-%m-%d %H:%M:%S") all_df = read_file_to_df(r"D:\data\淄博\故障记录_filtered.csv") all_df['激活时间'] = pd.to_datetime(all_df['激活时间']) all_files = read_excel_files(r"D:\data\淄博\淄博风场buffer文件(1)") dfs = pd.DataFrame() for file in all_files: base_name = os.path.basename(file) if base_name.startswith("b"): try: turbnine_no = int(base_name.split("_")[0].replace("b", "")) base_time, start_time, end_time = convert_and_calculate_time_range( base_name.replace(base_name.split("_")[0] + "_", "")[0:11]) except Exception as e: print("error:", file) raise e condation1 = (all_df['激活时间'] >= start_time) & (all_df['风机名'] == turbnine_no) condation2 = (all_df['激活时间'] < end_time) & (all_df['风机名'] == turbnine_no) condation = condation1 & condation2 dfs = pd.concat([dfs, all_df[condation]]) dfs.drop_duplicates(inplace=True) dfs.to_csv(r"D:\data\淄博\result.csv", encoding='utf8', index=False)