utils.py 2.7 KB

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