Python如何从嵌套字典生成Unix命令行格式的表格
解决方案
方案1:Python + Pandas 实现(适配你原有的技术选型)
你遇到的pandas不支持的问题是因为没有指定字典的加载方向,调整参数即可直接适配,完整代码如下:
import pandas as pd from tabulate import tabulate # 输入的原始嵌套字典 config_changes = { 'PERFORMANCE_SCHEMA_DIGESTS_SIZE': {'To': '-1', 'From': '10000'}, 'PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE': {'To': '-1', 'From': '512'}, 'ENCRYPT_TMP_DISK_TABLES': {'To': 'OFF', 'From': 'ON'}, 'INNODB_READ_IO_THREADS': {'To': '4', 'From': '10'} } # 转换为DataFrame,orient参数指定外层字典的key作为行索引 df = pd.DataFrame.from_dict(config_changes, orient='index').reset_index() # 重命名列名匹配输出要求 df.columns = ['Parameter', 'Previous Value(From)', 'Current Value(To)'] # 输出指定格式的ASCII表格,tablefmt='grid'就是你要的分隔线样式 print(tabulate(df, headers='keys', tablefmt='grid', showindex=False))
如果不想安装tabulate依赖,也可以直接用pandas内置的to_string方法调整格式输出。
方案2:纯Unix命令行实现(无需Python环境)
先把你的字典保存为标准JSON格式的文件diff.json,然后直接执行以下命令即可生成目标表格:
jq -r 'to_entries[] | [.key, .value.From, .value.To] | @tsv' diff.json | awk ' BEGIN { # 打印表头分隔线和表头 print "-------------------------------------------------------------------------------" printf "| %-32s | %-20s | %-18s |\n", "Parameter", "Previous Value(From)", "Current Value(To)" print "-------------------------------------------------------------------------------" } # 逐行打印内容和分隔线 { printf "| %-32s | %-20s | %-18s |\n", $1, $2, $3 print "-------------------------------------------------------------------------------" }'
你可以根据参数名的最大长度调整printf中的列宽数值,适配不同长度的配置项名称。
内容的提问来源于stack exchange,提问作者Mohankrishna
相关产品推荐
相关产品推荐

