python json表格化输出
需求
- 将json数据以表格形式输出
- 超长文本换行输出
- 能显示中文
- 在linux终端输出
实现
首先数据的模样。既然是表格化输出,那必然传入的数据是一个数组(废话),如果一个项文本很长需要换行输出,那这个项所属的项组都要换行输出。
首先是处理json数据:
jd = json.loads(data)
这样产生的数据是一个字典列表,即:
[{'key0': '值5', 'key1': '值5', 'key2': '值5', 'key3': '值5', 'key4': '值5'},
{'key0': '值6', 'key1': '值6', 'key2': '值6', 'key3': '值6', 'key4': '值6'},
{'key0': '值7', 'key1': '值7', 'key2': '值7', 'key3': '值7', 'key4': '值7'},
{'key0': '值8', 'key1': '值8', 'key2': '值8', 'key3': '值8', 'key4': '值8'},
{'key0': '值9', 'key1': '值9', 'key2': '值9', 'key3': '值9', 'key4': '值9'}]
定义函数
def tabular_print(datum):
上面说了,咱们先对传进来的数据进行检查:
try:
if len(datum) == 0:
print('None.')
return
except TypeError:
print('None')
return
对于每个数据组,统一调用 limit_print(line) 函数来打印。
首先打印表头:
limit_print(keys)
然后打印数据
for item in datum:
val = []
for k in keys:
val.append(item[k])
limit_print(val)
以下是 limit_print 的实现,仅针对一个汉字是两倍字母宽度的情况。
# 在有限的宽度下进行输出,超长则换行
def limit_print(line):
flag = True
max_row_size = 20
cnt = 0
length = []
for s in line:
length.append(get_length(str(s)))
lst = [0 for _ in range(len(line))]
sz = [0 for _ in range(len(line))]
while flag:
sod = 0
for i in range(len(line)):
s = str(line[i])
n = length[i]
if n < max_row_size * cnt:
sod += 1
print(' ' * max_row_size, end='')
else:
if n > max_row_size * (cnt + 1):
lst[i], sz[i] = next_station(s, lst[i], sz[i], max_row_size * (cnt + 1))
print(' ' * (max_row_size * (cnt + 1) - sz[i]), end='')
else:
sod += 1
lst[i], sz[i] = next_station(s, lst[i], sz[i], n)
print(' ' * (max_row_size * (cnt + 1) - sz[i]), end='')
print(' ', end='')
if sod == len(line):
flag = False
cnt += 1
print()
print('-' * (max_row_size + 1) * len(line))
# 获取字符串在屏幕上显示的长度
def get_length(s) -> int:
res = 0
for i in s:
# 中文占两个单位宽度
if is_full_width(i):
res += 2
else:
res += 1
return res
# 确定换行位置
def next_station(s, idx, st, ed) -> (int, int):
while idx < len(s) and st < ed:
if is_full_width(s[idx]):
if st + 2 > ed:
return idx, st
else:
st += 2
else:
st += 1
print(s[idx], end='')
idx += 1
return idx, st
# 是否是全角符号
def is_full_width(s) -> bool:
if '\u4e00' <= s <= '\u9fa5':
return True
if '\u0f01' <= s <= '\uff60':
return True
if '\uffe0' <= s <= '\uffe6':
return True
return False
python json表格化输出的更多相关文章
- python json.dumps()函数输出json格式,使用indent参数对json数据格式化输出
在python中,要输出json格式,需要对json数据进行编码,要用到函数:json.dumps json.dumps() :是对数据进行编码 #coding=gbkimport json dict ...
- python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持
在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name": ...
- Python json数据中文输出问题。
这个问题困扰了我好久好久,最后看了一眼官方文档,解决问题了. 问题描述:从web上获取的json数据,然后对应的保存到了python的类型中.再次输出这个数据时,中文总会变成\u1234这种形式. P ...
- python中json格式数据输出实现方式
python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...
- java 扁平化输出json所有节点key/value
本章主要介绍用java实现扁平化输出json所有节点key/value(包含所有内层子节点) 1.json结构 目的输出bill_list下的datalist里的子节点key/value 2.实现代码 ...
- 基于python2.7通过boto3实现ec2表格化
#!/usr/bin/env python import xlwt,xlrd,datetime,json,os,xlutils.copy a={ 'VpcPeeringConnection': { ' ...
- python JSON处理
概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等. 反序列化:就是从存储区域(JSON,XML)读取反序列化对象的 ...
- python json基础学习01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import json #全称(javascript object ...
- python大法好——python json
Python JSON 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式, ...
- Python Json & Pickle模块
用于序列化的两个模块 Json,用于字符串 和 python数据类型间进行转换 Pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...
随机推荐
- 记录一次排查log4cxx库按照日期回滚,不创建新目录的BUG
目录 1.背景 2.排查步骤 2.1.错误代码定位 2.2.问题猜测 2.3.错误代码分析 2.4.错误原因 3.解决方法 1.背景 C++ 项目,使用了 log4cxx 日志库,版本为:0.10.0 ...
- 学习Java Day22
今天学习了如何在包中增加类,想要将包放入类中,就必须将包的名字放在源文件的开头,即放在定义这个包中各个类的代码之前
- 一个比 Redis 性能更强的数据库
给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程.内存效率和高吞吐量.除了性能改进外,KeyDB还提供主动复制.闪存和子密钥过期等功能.KeyDB ...
- 【TS】class类和接口
class可以用来做数据的存储与回显,能将页面的数据分离出来并提取到class内,函数也可以抽离到class,实例化class进行调用.ts中的class类与js的class类基本相同,不同点在于ts ...
- 郁金香 用C写一个定时器来循环获取阳光
先来张效果图 定时器代码 HWND 游戏窗口句柄 = FindWindowA("MainWindow", "植物大战僵尸中文版"); ::SetTimer( ...
- appium 在linux安装和使用(持续更新)
appium V1.10 centos7.4 安装 安装步骤 1. 安装node 为了得到npm(node package manager,nodejs的安装包管理工具,可以通过npm来下载appiu ...
- 推荐一个分布式单点登录框架XXL-SSO!
有关单点登录(SSO)之前有写过两篇文章 一文读懂 JWT! 看完这篇不能再说不懂SSO原理了! 如果说XXL-JOB你可能并不陌生,它是非常火爆的一个分布式任务调度平台.但其实在该作者还有一个非常优 ...
- 【KAWAKO】speechmetrics-语音方面评价指标库的安装与使用
目录 简介 安装 将工程以压缩包形式下载到本地 把压缩包传到服务器(你想部署的地方)上进行解压 用编辑器打开setup.py进行修改 在工程目录下进行安装 测试 简介 speechmetrics库提供 ...
- JZOJ 2645. 【NOIP2011模拟11.1】钓鱼
题面 分析 状压 \(dp\) 直接上啊! 设 \(f_{t,S,pos}\) 表示 \(t\) 这个时刻之前能钓到的最多的鱼的数量 那么当前为可以钓鱼也可以移动 于是一切都明朗了 \(Code\) ...
- obj对象数据归类整理
两个字段根据id对应整理 <!doctype html> <html lang="en"> <head> <meta charse ...