WaveTrans.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import multiprocessing
  2. import os.path
  3. from utils.file.trans_methods import *
  4. from utils.systeminfo.sysinfo import get_available_cpu_count_with_percent
  5. class WaveTrans(object):
  6. def __init__(self, field_code, read_path, save_path: str):
  7. self.field_code = field_code
  8. self.read_path = read_path
  9. self.save_path = save_path
  10. def get_data(self, file_path):
  11. df = pd.read_csv(file_path, encoding=detect_file_encoding(file_path), header=None)
  12. data = [i for i in df[0].values]
  13. filename = os.path.basename(file_path)
  14. wind_num = filename.split('_')[1]
  15. cedian = '齿轮箱' + filename.split('_齿轮箱')[1].split('_Time')[0]
  16. cedian_time = filename.split('风机_')[1].split('_齿轮箱')[0].replace('_', ':')
  17. name_tmp = 'Time_' + filename.split('Time_')[1].split('_cms')[0]
  18. pinlv = name_tmp[0:name_tmp.rfind('_')]
  19. zhuansu = name_tmp[name_tmp.rfind('_') + 1:]
  20. df = pd.DataFrame()
  21. df['风机编号'] = [wind_num, wind_num]
  22. df['时间'] = [cedian_time, cedian_time]
  23. df['频率'] = [pinlv, pinlv]
  24. df['测点'] = ['转速', cedian]
  25. df['数据'] = [[float(zhuansu)], data]
  26. return df
  27. def run(self):
  28. all_files = read_files(self.read_path, ['csv'])
  29. # 最大取系统cpu的 1/2
  30. split_count = get_available_cpu_count_with_percent(1 / 2)
  31. with multiprocessing.Pool(split_count) as pool:
  32. dfs = pool.starmap(self.get_data, [(i,) for i in all_files])
  33. df = pd.concat(dfs, ignore_index=True, copy=False)
  34. df.drop_duplicates(subset=['风机编号', '时间', '频率', '测点'], keep='last')
  35. df.to_csv(os.path.join(self.save_path, self.field_code + '.csv'), index=False, encoding='utf8')