utils.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # -*- coding:utf-8 -*-
  2. """
  3. @author: yq
  4. @time: 2023/12/28
  5. @desc: 各种工具类
  6. """
  7. import datetime
  8. import inspect
  9. import os
  10. from json import JSONEncoder
  11. import base64
  12. import dataframe_image as dfi
  13. import pandas as pd
  14. import pytz
  15. from config import BaseConfig
  16. def f_format_float(num: float, n=3):
  17. return f"{num: .{n}f}"
  18. def f_get_date(offset: int = 0, connect: str = "-") -> str:
  19. current_date = datetime.datetime.now(pytz.timezone("Asia/Shanghai")).date() + datetime.timedelta(days=offset)
  20. return current_date.strftime(f"%Y{connect}%m{connect}%d")
  21. def f_get_datetime(offset: int = 0, connect: str = "_") -> str:
  22. current_date = datetime.datetime.now(pytz.timezone("Asia/Shanghai")) + datetime.timedelta(days=offset)
  23. return current_date.strftime(f"%Y{connect}%m{connect}%d{connect}%H{connect}%M{connect}%S")
  24. def f_get_clazz_in_module(module):
  25. """
  26. 获取包下的所有类
  27. """
  28. classes = []
  29. for name, member in inspect.getmembers(module):
  30. if inspect.isclass(member):
  31. classes.append(member)
  32. return classes
  33. def f_save_train_df(file_name: str, df: pd.DataFrame):
  34. file_path = os.path.join(BaseConfig.train_path, file_name)
  35. df.to_excel(f"{file_path}.xlsx", index=False)
  36. def f_df_to_image(df, filename, fontsize=12):
  37. dfi.export(obj=df, filename=filename, fontsize=fontsize, table_conversion='matplotlib')
  38. def _f_image_to_base64(image_path):
  39. with open(image_path, "rb") as image_file:
  40. img_str = base64.b64encode(image_file.read())
  41. return img_str.decode("utf-8")
  42. def f_display_images_by_side(image_path_list, display, title: str = "", width: int = 500):
  43. if isinstance(image_path_list, str):
  44. image_path_list = [image_path_list]
  45. html_str = '<div style="display:flex; justify-content:space-around;">'
  46. if title != "":
  47. html_str += '<h3>{}</h3>'.format(title)
  48. for image_path in image_path_list:
  49. html_str += f'<img src="data:image/png;base64,{_f_image_to_base64(image_path)}" style="width:{width}px;"/>'
  50. html_str += '</div>'
  51. display.display(display.HTML(html_str))
  52. class f_clazz_to_json(JSONEncoder):
  53. def default(self, o):
  54. return o.__dict__