# _*_ coding : UTF-8 _*_
# @Time : 2025/01/19 00:52
# @UpdateTime : 2025/01/19 00:52
# @Author : sonder
# @File : common.py
# @Software : PyCharm
# @Comment : 本程序
from typing import List, Any, Optional, Type


def bytes2human(n, format_str='%(value).1f%(symbol)s'):
    """Used by various scripts. See:
    http://goo.gl/zeJZl

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    """
    symbols = ('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB')
    prefix = {}
    for i, s in enumerate(symbols[1:]):
        prefix[s] = 1 << (i + 1) * 10
    for symbol in reversed(symbols[1:]):
        if n >= prefix[symbol]:
            value = float(n) / prefix[symbol]
            return format_str % locals()
    return format_str % dict(symbol=symbols[0], value=n)


async def filterKeyValues(dataList: List[dict], key: str, default: Any = None, convert_type: Optional[Type] = None) -> List[Any]:
    """
    获取列表字段数据，并可选择进行类型转换。
    :param dataList: 数据列表（列表中的元素是字典）
    :param key: 要提取的字段
    :param default: 如果字段不存在，返回的默认值
    :param convert_type: 需要转换的类型（如 int、str、float 等），默认为 None 不转换
    :return: 提取并转换后的值列表
    """
    return [convert_type(item.get(key, default)) if convert_type else item.get(key, default) for item in dataList]
