dataframe-textual 2.3.0__py3-none-any.whl → 2.4.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dataframe_textual/common.py +7 -10
- dataframe_textual/data_frame_table.py +1 -1
- {dataframe_textual-2.3.0.dist-info → dataframe_textual-2.4.2.dist-info}/METADATA +18 -15
- {dataframe_textual-2.3.0.dist-info → dataframe_textual-2.4.2.dist-info}/RECORD +7 -7
- {dataframe_textual-2.3.0.dist-info → dataframe_textual-2.4.2.dist-info}/WHEEL +0 -0
- {dataframe_textual-2.3.0.dist-info → dataframe_textual-2.4.2.dist-info}/entry_points.txt +0 -0
- {dataframe_textual-2.3.0.dist-info → dataframe_textual-2.4.2.dist-info}/licenses/LICENSE +0 -0
dataframe_textual/common.py
CHANGED
|
@@ -12,7 +12,7 @@ import polars as pl
|
|
|
12
12
|
from rich.text import Text
|
|
13
13
|
|
|
14
14
|
# Supported file formats
|
|
15
|
-
SUPPORTED_FORMATS =
|
|
15
|
+
SUPPORTED_FORMATS = ["tsv", "csv", "psv", "excel", "parquet", "json", "ndjson"]
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Boolean string mappings
|
|
@@ -529,7 +529,10 @@ def load_dataframe(
|
|
|
529
529
|
ext = Path(filename).suffix.lower()
|
|
530
530
|
if ext == ".gz":
|
|
531
531
|
ext = Path(filename).with_suffix("").suffix.lower()
|
|
532
|
+
|
|
532
533
|
fmt = ext.removeprefix(".")
|
|
534
|
+
if fmt in ("xls", "xlsx"):
|
|
535
|
+
fmt = "excel"
|
|
533
536
|
|
|
534
537
|
# Default to TSV
|
|
535
538
|
if not fmt or fmt not in SUPPORTED_FORMATS:
|
|
@@ -668,17 +671,11 @@ def load_file(
|
|
|
668
671
|
filename = f"stdin.{file_format}" if isinstance(source, StringIO) else source
|
|
669
672
|
filepath = Path(filename)
|
|
670
673
|
|
|
671
|
-
if not file_format:
|
|
672
|
-
ext = filepath.suffix.lower()
|
|
673
|
-
if ext == ".gz":
|
|
674
|
-
ext = Path(filename).with_suffix("").suffix.lower()
|
|
675
|
-
file_format = ext.removeprefix(".")
|
|
676
|
-
|
|
677
674
|
# Load based on file format
|
|
678
|
-
if file_format in ("csv", "tsv"):
|
|
675
|
+
if file_format in ("csv", "tsv", "psv"):
|
|
679
676
|
lf = pl.scan_csv(
|
|
680
677
|
source,
|
|
681
|
-
separator="\t" if file_format == "tsv" else ",",
|
|
678
|
+
separator="\t" if file_format == "tsv" else ("|" if file_format == "psv" else ","),
|
|
682
679
|
has_header=has_header,
|
|
683
680
|
infer_schema=infer_schema,
|
|
684
681
|
comment_prefix=comment_prefix,
|
|
@@ -691,7 +688,7 @@ def load_file(
|
|
|
691
688
|
truncate_ragged_lines=truncate_ragged_lines,
|
|
692
689
|
)
|
|
693
690
|
data.append(Source(lf, filename, filepath.stem))
|
|
694
|
-
elif file_format
|
|
691
|
+
elif file_format == "excel":
|
|
695
692
|
if first_sheet:
|
|
696
693
|
# Read only the first sheet for multiple files
|
|
697
694
|
lf = pl.read_excel(source).lazy()
|
|
@@ -3783,7 +3783,7 @@ class DataFrameTable(DataTable):
|
|
|
3783
3783
|
"""Open screen to save file."""
|
|
3784
3784
|
self._task_after_save = task_after_save
|
|
3785
3785
|
tab_count = len(self.app.tabs)
|
|
3786
|
-
save_all =
|
|
3786
|
+
save_all = all_tabs is not False
|
|
3787
3787
|
|
|
3788
3788
|
filepath = Path(self.filename)
|
|
3789
3789
|
if save_all:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataframe-textual
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: Interactive terminal viewer/editor for tabular data
|
|
5
5
|
Project-URL: Homepage, https://github.com/need47/dataframe-textual
|
|
6
6
|
Project-URL: Repository, https://github.com/need47/dataframe-textual.git
|
|
@@ -39,7 +39,7 @@ Description-Content-Type: text/markdown
|
|
|
39
39
|
|
|
40
40
|
# DataFrame Textual
|
|
41
41
|
|
|
42
|
-
A powerful, interactive terminal-based viewer/editor for CSV/TSV/Excel/Parquet/JSON/NDJSON built with Python, [Polars](https://pola.rs/), and [Textual](https://textual.textualize.io/). Inspired by [VisiData](https://www.visidata.org/), this tool provides smooth keyboard navigation, data manipulation, and a clean interface for exploring tabular data directly in terminal with multi-tab support for multiple files!
|
|
42
|
+
A powerful, interactive terminal-based viewer/editor for CSV/TSV/PSV/Excel/Parquet/JSON/NDJSON built with Python, [Polars](https://pola.rs/), and [Textual](https://textual.textualize.io/). Inspired by [VisiData](https://www.visidata.org/), this tool provides smooth keyboard navigation, data manipulation, and a clean interface for exploring tabular data directly in terminal with multi-tab support for multiple files!
|
|
43
43
|
|
|
44
44
|

|
|
45
45
|
|
|
@@ -167,28 +167,31 @@ When multiple files are opened:
|
|
|
167
167
|
## Command Line Options
|
|
168
168
|
|
|
169
169
|
```
|
|
170
|
-
usage: dv [-h] [-f {csv,excel,
|
|
170
|
+
usage: dv [-h] [-V] [-f {csv,json,excel,ndjson,psv,parquet,tsv}] [-H] [-I] [-t] [-E] [-c [COMMENT_PREFIX]] [-q [QUOTE_CHAR]] [-l SKIP_LINES] [-a SKIP_ROWS_AFTER_HEADER] [-n NULL [NULL ...]] [files ...]
|
|
171
171
|
|
|
172
|
-
Interactive terminal based viewer/editor for tabular data (e.g., CSV/
|
|
172
|
+
Interactive terminal based viewer/editor for tabular data (e.g., CSV/Excel).
|
|
173
173
|
|
|
174
174
|
positional arguments:
|
|
175
|
-
files
|
|
175
|
+
files Files to view (or read from stdin)
|
|
176
176
|
|
|
177
177
|
options:
|
|
178
178
|
-h, --help show this help message and exit
|
|
179
|
-
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
-
|
|
179
|
+
-V, --version show program's version number and exit
|
|
180
|
+
-f, --format {csv,json,excel,ndjson,psv,parquet,tsv}
|
|
181
|
+
Specify the format of the input files (csv, excel, tsv etc.)
|
|
182
|
+
-H, --no-header Specify that input files have no header row when reading CSV/TSV
|
|
183
|
+
-I, --no-inference Do not infer data types when reading CSV/TSV
|
|
184
|
+
-t, --truncate-ragged-lines
|
|
185
|
+
Truncate ragged lines when reading CSV/TSV
|
|
183
186
|
-E, --ignore-errors Ignore errors when reading CSV/TSV
|
|
184
|
-
-c, --comment-prefix COMMENT_PREFIX
|
|
185
|
-
Comment lines are skipped when reading CSV/TSV
|
|
186
|
-
-q, --quote-char QUOTE_CHAR
|
|
187
|
-
Quote character for reading CSV/TSV
|
|
187
|
+
-c, --comment-prefix [COMMENT_PREFIX]
|
|
188
|
+
Comment lines are skipped when reading CSV/TSV
|
|
189
|
+
-q, --quote-char [QUOTE_CHAR]
|
|
190
|
+
Quote character for reading CSV/TSV
|
|
188
191
|
-l, --skip-lines SKIP_LINES
|
|
189
|
-
Skip lines when reading CSV/TSV
|
|
192
|
+
Skip lines when reading CSV/TSV
|
|
190
193
|
-a, --skip-rows-after-header SKIP_ROWS_AFTER_HEADER
|
|
191
|
-
Skip rows after header when reading CSV/TSV
|
|
194
|
+
Skip rows after header when reading CSV/TSV
|
|
192
195
|
-n, --null NULL [NULL ...]
|
|
193
196
|
Values to interpret as null values when reading CSV/TSV
|
|
194
197
|
```
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
dataframe_textual/__init__.py,sha256=E53fW1spQRA4jW9grxSqPEmoe9zofzr6twdveMbt_W8,1310
|
|
2
2
|
dataframe_textual/__main__.py,sha256=xXeUA2EqVhufPkTbvv6MOCt3_ESHBH3PsCE--07a0ww,3613
|
|
3
|
-
dataframe_textual/common.py,sha256=
|
|
3
|
+
dataframe_textual/common.py,sha256=8Fqwuco7z4p_3GDCF7Gp8SYGUz24Sncpc457FCyMMWk,28516
|
|
4
4
|
dataframe_textual/data_frame_help_panel.py,sha256=UEtj64XsVRdtLzuwOaITfoEQUkAfwFuvpr5Npip5WHs,3381
|
|
5
|
-
dataframe_textual/data_frame_table.py,sha256=
|
|
5
|
+
dataframe_textual/data_frame_table.py,sha256=4I8acfjvnOKOhzZFjhqvaaOYhrz1IZHK5WnUKrPd12M,151387
|
|
6
6
|
dataframe_textual/data_frame_viewer.py,sha256=aUjIk9BWYKyMG87PirFxR79iNLzkEcZ-I5XVnXwDEnU,23284
|
|
7
7
|
dataframe_textual/sql_screen.py,sha256=P3j1Fv45NIKEYo9adb7NPod54FaU-djFIvCUMMHbvjY,7534
|
|
8
8
|
dataframe_textual/table_screen.py,sha256=XPzJI6FXjwnxtQSMTmluygwkYM-0-Lx3v9o-MuL6bMg,19071
|
|
9
9
|
dataframe_textual/yes_no_screen.py,sha256=NI7Zt3rETDWYiT5CH_FDy7sIWkZ7d7LquaZZbX79b2g,26400
|
|
10
|
-
dataframe_textual-2.
|
|
11
|
-
dataframe_textual-2.
|
|
12
|
-
dataframe_textual-2.
|
|
13
|
-
dataframe_textual-2.
|
|
14
|
-
dataframe_textual-2.
|
|
10
|
+
dataframe_textual-2.4.2.dist-info/METADATA,sha256=4EAHZULXbSWz4Eb5Mf8_VlUIOHdx9L4VY2vIhnanrLc,29482
|
|
11
|
+
dataframe_textual-2.4.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
12
|
+
dataframe_textual-2.4.2.dist-info/entry_points.txt,sha256=R_GoooOxcq6ab4RaHiVoZ4zrZJ-phMcGmlL2rwqncW8,107
|
|
13
|
+
dataframe_textual-2.4.2.dist-info/licenses/LICENSE,sha256=AVTg0gk1X-LHI-nnHlAMDQetrwuDZK4eypgSMDO46Yc,1069
|
|
14
|
+
dataframe_textual-2.4.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|