diff --git a/config/visidataplugins/hidecol.py b/config/visidataplugins/hidecol.py index 83d9fd0..88a3712 100644 --- a/config/visidataplugins/hidecol.py +++ b/config/visidataplugins/hidecol.py @@ -1,5 +1,5 @@ __version__ = "0.1.0" -__author__ = "Your Name " +__author__ = "Tabledevil " from visidata import Sheet, BaseSheet, vd @@ -10,26 +10,30 @@ 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 = {} - + # Count how many columns were hidden + counter = 0 # 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 + # If the column is not hidden + if col.width and col.width > 0: + # Check if the column is empty (all cells are empty or None) + if all([col.getValue(row) in (None, "", "null") for row in sheet.rows]): + # Hide the column + col.width = 0 + counter += 1 + # Skip the next check for same values since all cells are empty or None + 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 + # Check if the column is superfluous (contains the same value in every row) + # collect all values in the column as strings + values = set([f'{col.getValue(row)}' for row in sheet.rows if col.getValue(row) not in (None, "", "null")]) + # If there is only one value in the column + if len(values) == 1: + # Hide the column + col.width = 0 + counter += 1 - # 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.") + vd.status(f"Hid {counter} empty/superfluous columns.") else: vd.status("No empty/superfluous columns to hide.")