LaserTrans.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import datetime
  2. import multiprocessing
  3. import os.path
  4. import pandas as pd
  5. from service.plt_service import get_all_wind
  6. from service.trans_service import save_df_to_db
  7. from utils.file.trans_methods import read_files, read_file_to_df
  8. from utils.log.trans_log import set_trance_id
  9. class LaserTrans():
  10. """
  11. 激光测距仪转化
  12. """
  13. def __init__(self, field_code, read_path, save_path: str):
  14. self.field_code = field_code
  15. self.read_path = read_path
  16. self.save_path = save_path
  17. self.begin = datetime.datetime.now()
  18. self.wind_col_trans, _ = get_all_wind(self.field_code, need_rated_param=False)
  19. def get_file_data(self, file_path):
  20. file_name = os.path.basename(file_path)
  21. wind_farm, wind_turbine_number, acquisition_time, sampling_frequency = file_name.split("_")
  22. result_df = pd.DataFrame()
  23. result_df['wind_turbine_number'] = wind_turbine_number
  24. result_df['acquisition_time'] = pd.to_datetime(acquisition_time, format='%Y%m%d%H%M%S')
  25. result_df['sampling_frequency'] = sampling_frequency
  26. result_df['wind_turbine_number'] = result_df['wind_turbine_number'].map(self.wind_col_trans).fillna(
  27. result_df['wind_turbine_number'])
  28. # 获取数据
  29. df = read_file_to_df(file_path)
  30. result_df['pk_no'] = df['PkNo'].values[0]
  31. result_df['echo_type'] = df['EchoType'].values[0]
  32. result_df['echo1_dist'] = df['Echo1Dist'].values
  33. result_df['echo1_grey'] = df['Echo1Grey'].values
  34. result_df['echo2_dist'] = df['Echo2Dist'].values
  35. result_df['echo2_grey'] = df['Echo2Grey'].values
  36. result_df['echo3_dist'] = df['Echo3Dist'].values
  37. result_df['echo3_grey'] = df['Echo3Grey'].values
  38. save_df_to_db(self.field_code + "_laser", result_df)
  39. def run(self):
  40. trance_id = '-'.join([self.field_code, 'laser'])
  41. set_trance_id(trance_id)
  42. all_files = read_files(self.read_path, ['csv'])
  43. pool_count = 8 if len(all_files) > 8 else len(all_files)
  44. with multiprocessing.Pool(pool_count) as pool:
  45. pool.map(self.get_file_data, all_files)