Add visidata plugin and json-function

This commit is contained in:
TKE
2023-05-04 08:09:27 +02:00
parent e51b0f42c6
commit 2ecb7d5ea0
2 changed files with 58 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
__version__ = "0.1.0"
__author__ = "Your Name <your.email@example.com>"
from visidata import Sheet, BaseSheet, vd
@Sheet.api
def hide_empty_and_superfluous_cols(sheet):
"""
Given a sheet, hides columns that are empty or superfluous (contain the same
value in every row).
"""
# Create a dictionary to keep track of which columns to hide
cols_to_hide = {}
# Check each column for being empty or superfluous
for col in sheet.visibleCols:
# Check if the column is empty (all cells are empty or None)
if all([col.getValue(row) in (None, "") for row in sheet.rows]):
cols_to_hide[col] = True
continue
# Check if the column is superfluous (contains the same value in every row)
values = set([col.getValue(row) for row in sheet.rows if col.getValue(row) not in (None, "", "null")])
if len(values) == 1:
cols_to_hide[col] = True
# Hide the columns that were flagged
if cols_to_hide:
for col in cols_to_hide:
col.width=0
vd.status(f"Hid {len(cols_to_hide)} empty/superfluous columns.")
else:
vd.status("No empty/superfluous columns to hide.")
Sheet.addCommand(None, "tke-hidecol", "sheet.hide_empty_and_superfluous_cols()")

View File

@@ -1,11 +1,20 @@
# copy or link this file to ~/.visidatarc # copy or link this file to ~/.visidatarc
options.disp_date_fmt="%Y-%m-%dT%H:%M:%S" options.disp_date_fmt="%Y-%m-%dT%H:%M:%S"
import plugins.hidecol
from datetime import datetime from datetime import datetime
import functools import functools
import json import json
from urllib.parse import unquote_plus
def decode_url_safe(url_safe_string):
utf8_string = unquote_plus(url_safe_string)
return utf8_string
def what(item): def what(item):
return f"{type(item)}:{str(item)}" return f"{type(item)}:{str(item)}"
@@ -267,3 +276,15 @@ def int2ip(zahl):
# convert IP-String to Integer # convert IP-String to Integer
def ip2int(ip): def ip2int(ip):
return int.from_bytes(b"".join([int(c).to_bytes(1,'big') for c in b.split('.')]),'big') return int.from_bytes(b"".join([int(c).to_bytes(1,'big') for c in b.split('.')]),'big')
# parse KeyValue
def dirty_kv(data):
return {y[0] : y[1] for y in [x.strip().split("=") for x in data.strip().strip('"{}').split(',')]}
# parse json with missing quotes around attribute names
import yaml
def dirty_json(data):
return yaml.load(data, yaml.SafeLoader)