paste_zayo

Temperature_GATE

Jul 14th, 2025
5
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. import os
  2. import pandas as pd
  3. from datetime import datetime
  4. import re
  5.  
  6. # Bulgarian to English month mapping
  7. bg_months = {
  8. 'януари': 'January', 'яну.': 'January',
  9. 'февруари': 'February', 'февр.': 'February',
  10. 'март': 'March',
  11. 'април': 'April', 'апр.': 'April',
  12. 'май': 'May',
  13. 'юни': 'June',
  14. 'юли': 'July',
  15. 'август': 'August', 'авг.': 'August',
  16. 'септември': 'September', 'септ.': 'September',
  17. 'октомври': 'October', 'окт.': 'October',
  18. 'ноември': 'November', 'ное.': 'November',
  19. 'декември': 'December', 'дек.': 'December'
  20. }
  21.  
  22. def translate_bg_date(date_str):
  23. for bg, en in bg_months.items():
  24. if bg in date_str:
  25. date_str = date_str.replace(bg, en)
  26. break
  27. try:
  28. dt = datetime.strptime(date_str.strip(), "%d %B %Y %H:%M:%S")
  29. return dt.strftime("%Y/%m/%d %H:%M:%S")
  30. except:
  31. return None
  32.  
  33. def process_file(file_path):
  34. with open(file_path, 'r', encoding='utf-8-sig') as f:
  35. lines = f.readlines()
  36.  
  37. # Extract metadata using regex based on "." and "-"
  38. meta_line = next((line for line in lines if 'history:' in line.lower()), '').strip()
  39. sensor_id = room_name = sensor_type = floor = "Unknown"
  40. try:
  41. match = re.search(r'history:GATEBMS/([\w-]+)\.\s(.*?)\s-\s(\d{8})\s-\s(\w+)', meta_line)
  42.  
  43.  
  44.  
  45. if match:
  46. floor = match.group(1) # FL0, FL1, etc.
  47. room_name = match.group(2) # Conference room
  48. sensor_id = match.group(3) # 82000968
  49. sensor_type = match.group(4) # Temp
  50. except Exception as e:
  51. print(f"⚠️ Metadata regex parsing failed in {file_path}: {e}")
  52.  
  53. # Find header line for data
  54. data_start = 0
  55. for i, line in enumerate(lines):
  56. if 'timestamp' in line.lower() and 'value' in line.lower():
  57. data_start = i
  58. break
  59.  
  60. try:
  61. df = pd.read_csv(file_path, skiprows=data_start)
  62. df.columns = [col.strip().lower() for col in df.columns]
  63.  
  64. if 'timestamp' not in df.columns or 'value (°c)' not in df.columns:
  65. print(f"⚠️ Skipped file (missing expected columns): {file_path}")
  66. return pd.DataFrame()
  67.  
  68. # Clean and convert data
  69. df_clean = pd.DataFrame()
  70. df_clean['time'] = df['timestamp'].astype(str).apply(translate_bg_date)
  71. df_clean['value'] = df['value (°c)'].astype(str).str.replace(',', '.').astype(float)
  72. df_clean['ID/key'] = sensor_id
  73. df_clean['floor'] = floor
  74. df_clean['room name'] = room_name
  75. df_clean['sensor type'] = sensor_type
  76.  
  77. df_clean = df_clean.dropna(subset=['time', 'value'])
  78.  
  79. if df_clean.empty:
  80. print(f"⚠️ Skipped (no valid rows): {file_path}")
  81.  
  82. return df_clean
  83.  
  84. except Exception as e:
  85. print(f"⚠️ Error reading {file_path}: {e}")
  86. return pd.DataFrame()
  87.  
  88. def process_all_csvs(folder_path, output_excel):
  89. all_dfs = []
  90. for filename in os.listdir(folder_path):
  91. if filename.lower().endswith(".csv"):
  92. file_path = os.path.join(folder_path, filename)
  93. df = process_file(file_path)
  94. if not df.empty:
  95. all_dfs.append(df)
  96. else:
  97. print(f"⚠️ No data extracted from: {filename}")
  98.  
  99. if all_dfs:
  100. merged = pd.concat(all_dfs, ignore_index=True)
  101. os.makedirs(os.path.dirname(output_excel), exist_ok=True)
  102. merged.to_excel(output_excel, index=False)
  103. print(f"\n✅ Done! {len(merged)} total rows saved to:\n{output_excel}")
  104. else:
  105. print("⚠️ No valid data found.")
  106.  
  107. # ==== USAGE ====
  108. input_folder = r"C:/Working_desktop/GATE_stuff/Fledge/BMS_GATE_data/BSM_ALL_Sensors_1month_by_rooms/Temperature"
  109.  
  110. output_file = r"C:/Working_desktop/GATE_stuff/Fledge/BMS_GATE_data/BSM_ALL_Sensors_1month_by_rooms/Temperature/Results/final_Merged_table_Incl_device_IDs.xlsx"
  111.  
  112. process_all_csvs(input_folder, output_file)
  113.  
Advertisement
Add Comment
Please, Sign In to add comment