Pet*_*ren 7 python markdown json
我正在尝试构建一个函数,将 JSON 数据转换为列表,然后用作构建 Markdown 表的基础。
我有第一个原型:
#!/usr/bin/env python3
import json
data = {
"statistics": {
"map": [
{
"map_name": "Location1",
"nan": "loc1",
"dont": "ignore this",
"packets": "878607764338"
},
{
"map_name": "Location2",
"nan": "loc2",
"dont": "ignore this",
"packets": "67989088698"
},
],
"map-reset-time": "Thu Jan 6 05:59:47 2022\n"
}
}
headers = ['Name', 'NaN', 'Packages']
def jsonToList(data):
"""adds the desired json fields"""
# Wil be re-written to be more acceptant to different data fields.
json_obj = data
ips = []
for piece in json_obj['statistics']['map']:
this_ip = [piece['map_name'], piece['nan'], piece['packets']]
ips.append(this_ip)
return ips
def markdownTable(data, headers):
# Find maximal length of all elements in list
n = max(len(x) for l in data for x in l)
# Print the rows
headerLength = len(headers)
# expected "| Name| NaN| Packages|"
for i in range(len(headers)):
# Takes the max number of characters and subtracts the length of the header word
hn = n - len(headers[i])
# Prints | [space based on row above][header word]
print("|" + " " * hn + f"{headers[i]}", end='')
# If last run is meet add ending pipe
if i == headerLength-1:
print("|") # End pipe for headers
# expected |--------|--------|--------|
print("|", end='') # Start pipe for sep row
for i in range(len(headers)):
print ("-" *n + "|", end='')
# seams to be adding an extra line however if its not there,
# Location1
print("\n", end='')
dataLength = len(data)
for row in data:
for x in row:
hn = n - len(x)
print(f"|" + " " * hn + x, end='')
print("|")
if __name__ == "__main__":
da = jsonToList(data)
markdownTable(da, headers)
Run Code Online (Sandbox Code Playgroud)
此代码按预期输出一个可用作降价的表格。
| Name| NaN| Packages|
|------------|------------|------------|
| Location1| loc1|878607764338|
| Location2| loc2| 67989088698|
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人对当前我正在使用的单词(集中)的放置有任何好的想法,n = max(len(x) for l in data for x in l)
然后减去当前字符串的长度并将其放在输出的末尾,这对于左对齐非常有效,但是如果想让它们居中,就有问题了。
此外,如果有人在我第一次尝试或直接从 JSON 开始的方法之前构建了类似的函数,那么我们非常感谢有关优化代码的方法的一般反馈。
如果您可以自由使用pandas
,这非常简单。降价功能很容易使用。请参阅下面的示例。
import pandas\ndf = pandas.DataFrame.from_dict(data['statistics']['map']).rename(columns={'map_name':'Name', 'nan':'NaN', 'packets':'Packages'})\ndf.drop(['dont'], axis=1, inplace=True)\nprint(df.to_markdown(index=False,tablefmt='fancy_grid'))\n
Run Code Online (Sandbox Code Playgroud)\n这将提供如下输出:
\n\xe2\x95\x92\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa4\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa4\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x95\n\xe2\x94\x82 Name \xe2\x94\x82 NaN \xe2\x94\x82 Packages \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 Location1 \xe2\x94\x82 loc1 \xe2\x94\x82 878607764338 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 Location2 \xe2\x94\x82 loc2 \xe2\x94\x82 67989088698 \xe2\x94\x82\n\xe2\x95\x98\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa7\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa7\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9b\n
Run Code Online (Sandbox Code Playgroud)\n您可以使用tablefmt
参数来应用不同的样式,例如psql, pipe
等。
归档时间: |
|
查看次数: |
6768 次 |
最近记录: |