lyg
2025-05-22 e60d75228fb161e464ca59fa2526bf0765f4d902
knowledgebase/utils.py
@@ -1,4 +1,9 @@
import math
import hashlib
import os
import json
import re
import asyncio
def get_bit_mask(start, end):
@@ -9,3 +14,76 @@
    for i in range(start, end + 1):
        mask |= 1 << (bits - i - 1)
    return mask
def generate_text_md5(input_string):
    # 创建一个 md5 哈希对象
    md5_hash = hashlib.md5()
    # 更新哈希对象的内容(需要将字符串编码为字节)
    md5_hash.update(input_string.encode('utf-8'))
    # 获取哈希值的十六进制表示
    md5_digest = md5_hash.hexdigest()
    return md5_digest
def generate_bytes_md5(input_bytes):
    # 创建一个 md5 哈希对象
    md5_hash = hashlib.md5()
    # 更新哈希对象内容
    md5_hash.update(input_bytes)
    # 获取哈希值的十六进制表示
    md5_digest = md5_hash.hexdigest()
    return md5_digest
async def get_md5_async(file: bytes):
    md5 = await asyncio.to_thread(generate_bytes_md5, file)
    return md5
async def save_to_file_async(data: bytes, file_path: str):
    await asyncio.to_thread(save_bytes_to_file, data, file_path)
def file_exists(cache_file: str):
    return os.path.exists(cache_file)
def read_from_file(file: str) -> str:
    with open(file, 'r', encoding='utf-8') as f:
        text = f.read()
    return text
def save_text_to_file(text: str, file: str):
    with open(file, 'w', encoding='utf-8') as f:
        f.write(text)
def save_bytes_to_file(bytes_data: bytes, file: str):
    with  open(file, 'wb') as f:
        f.write(bytes_data)
def replace_tpl_paras(tpl_text: str, data: dict):
    for key, val in data.items():
        if not isinstance(val, str):
            val = json.dumps(json.dumps(val, ensure_ascii=False), ensure_ascii=False)[1:-1]
        tpl_text = tpl_text.replace('{{' + key + '}}', val)
    return tpl_text
def to_file_name(text: str):
    """
    将文本转为合法的文件名称。
    将特殊字符替换为_
    :param text:
    :return:
    """
    return re.sub(r'[\\/:*?"<>|]', '_', text)