zibo_guzhang_select_time.py 1.9 KB

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