首页 > 技术文章 > 格式化toml脚本

rainbow-tan 2022-01-26 14:53 原文

格式化toml脚本

# encoding=utf-8
import os


def traverse_folder(folder, only_first=False):
    folder = os.path.abspath(folder)
    all_files = []
    all_dirs = []
    if os.path.isdir(folder):
        for root, dirs, files in os.walk(folder):
            for one_file in files:
                all_files.append(os.path.join(root, one_file))  # 所有文件
            for one_dir in dirs:
                all_dirs.append(os.path.join(root, one_dir))  # 所有文件夹
            if only_first:
                break
    else:
        msg = 'Can not find folder:{} for traverse'.format(folder)
        print(msg)
    return all_dirs, all_files


def format_toml(filename):
    with open(filename, "r") as f:
        content = f.readlines()

    strip_content = []
    for info in content:
        if info.strip() != "":
            strip_content.append(info.strip())

    new_content = []
    last_count = ""
    for line in strip_content:
        if line.strip().startswith("[") and line.strip().endswith("]"):

            count = line.count(".")
            last_count = "    " * count
            new_line = "    " * count + line

            new_content.append(new_line)
        else:
            if line.strip() != "":
                new_content.append(last_count + "    " + line)
            else:
                new_content.append(line)

    new_content = list(map(lambda x: x + "\n", new_content))

    for index, line in enumerate(new_content):
        if line.strip().startswith("[") and line.strip().endswith("]") and index - 1 > 0 and not (
                new_content[index - 1].strip().startswith("[") and new_content[index - 1].strip().endswith("]")):
            new_content[index - 1] = new_content[index - 1] + "\n"

    with open(toml_file, "w") as f:
        f.writelines(new_content)
    abs_filename = os.path.abspath(toml_file)
    print(f"success format file:{abs_filename}")


if __name__ == '__main__':
    toml_files = []
    _, files = traverse_folder(".")
    for file in files:
        if file.lower().endswith(".toml"):
            toml_files.append(file)
    for toml_file in toml_files:
        format_toml(toml_file)

toml样例

[basic]
    # validation 校验器错误信息语言
    language = "zh"

[redis]
    host = "127.0.0.1"
    port = 6379
    db = 5
    password = "000000"
    max_idle = 6
    max_active = 10
    idle_timeout = 60

[xxx]
    [xxx.u]
        host = "127.0.0.1"
        authorization = "input your token

[qqq]
    [qqq.r]
        url = "input your url
        token = "input your token

    [qqq.r2]
        url = "input your url
        token = "input your token

[ttt]
    url = 'input your url

[ppp]
    url = "input your url
    token = "2222wfafesaf"

[api]
    [api.image]
        url = "input your url

    [api.a]
        url = "input your url
        authorId = "wrsfsf"

    [api.b]
        url = "input your url
        authorId = "scsdgsc"

    [api.c]
        url = "input your url
        token = "input your token

    [api.d]
        url = "input your url
        token = "input your token

[domain]
    #WWWFWF
    url = "input your url

[log]
    logLevel = "INFO"
    logPath = "/logs/adfa"

推荐阅读