1 Star 0 Fork 0

realysy/siyuan_git_filter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
filter_common.py 2.10 KB
一键复制 编辑 原始数据 按行查看 历史
import os
import re
import logging
from logging.handlers import RotatingFileHandler
def make_log_dir() -> str:
# 获取脚本所在的文件夹路径
script_dir = os.path.dirname(os.path.abspath(__file__))
log_folder = os.path.join(script_dir, 'logs')
# print(log_folder)
os.makedirs(log_folder, exist_ok=True)
return log_folder
def get_logger(filename: str, encoding: str, maxBytes: int, bak_num: int) -> logging.Logger:
# 创建日志器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.INFO)
# 创建RotatingFileHandler,设置日志文件名称、存储路径和最大文件大小
log_filename = os.path.join(make_log_dir(), filename)
file_handler = RotatingFileHandler(log_filename, 'w', encoding=encoding,
maxBytes=maxBytes, backupCount=bak_num)
file_handler.setLevel(logging.INFO)
# 设置日志输出格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 添加文件处理器到日志器
logger.addHandler(file_handler)
return logger
def keep_unicode(json_str: str, flag_str: str = "XGYKNPSD") -> str:
""" 防止Unicode序列被转义为Unicode字符:
* 比如`\u0026` 不要转义为 `&`
* 以及其它: `\u003c`, `\u003e`
原理:把`\u0026`中的`\`替换成`flag_str`
"""
def keep_backslash(matchobj):
return flag_str + matchobj.group(0)[1:]
# 替换字符串中所有的转义序列,比如`\u0026`、`\u003e`,但是不要替换`\\u0026`、`\\u003e`
pattern = r'(?<!\\)(\\u[0-9a-fA-F]{4})' # 使用负向断言 (?<!\\) 排除以 \\ 开头的转义序列
json_str = re.sub(pattern, keep_backslash, json_str)
return json_str
def restore_unicode(json_str: str, flag_str: str = "XGYKNPSD") -> str:
""" 恢复前面的替换
* 原理:把类似于 f"{flag_str}u0026" 样式中的`{flag_str}`替换为`\`
"""
pattern = flag_str + r'(?=u[0-9a-fA-F]{4})'
json_str = re.sub(pattern, r'\\', json_str)
return json_str
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/realysy/siyuan_git_filter.git
git@gitee.com:realysy/siyuan_git_filter.git
realysy
siyuan_git_filter
siyuan_git_filter
master

搜索帮助