What is a TSV file

What is a TSV file and how do you open one?

A TSV (tab-separated values) file is a plain-text table with 1 tab between fields and 1 record per line, registered with IANA as text/tab-separated-values. You can open .tsv and .tab files up to 1.5 GB in your browser with rows.page, free with no signup.

.tsv.csv
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).

What is a TSV file?

A TSV file stores a table as plain text, usually with a .tsv or .tab extension. Each line is a row, and a tab character separates each value from the next:

tsv
id	country	price
1	NL	20
2	US	35

You often have TSV without saving a file: copying a range of cells in Excel or Google Sheets puts tab-separated text on the clipboard.

What are the TSV format rules?

The IANA registration for text/tab-separated-values is short:

  • Each record is one line.
  • Fields are separated by a tab character.
  • A field can't contain a tab.
  • The first line holds the field names, separated by tabs.
  • Every record has the same number of fields.

Because a field can never contain the separator, the definition needs no quoting or escaping: every tab starts a new column. If a value does contain a tab, a reader that splits on tabs sees an extra field and the rest of the row shifts one column to the right. rows.page detects the tab delimiter and the header row automatically, so you don't set either.

TSV vs CSV: what is the difference?

TSV vs CSV
PropertyTSVCSV
Field separatorTabComma
Extensions.tsv, .tab.csv
Media typetext/tab-separated-values (IANA)text/csv (RFC 4180)
Separator inside a valueNot allowedAllowed inside double quotes
QuotingNoneDouble quotes, with a quote inside written as ""
Header rowRequired by the IANA definitionOptional in RFC 4180
Line break inside a valueNot possible: each record is one lineAllowed inside double quotes

Tabs rarely appear in names, addresses or product descriptions, while commas often do, so TSV sidesteps most quoting problems. CSV handles those values by wrapping them in double quotes, as RFC 4180 describes.

How do you open a TSV file?

rows.page

  1. Drop a .tsv or .tab file on rows.page. Tab-separated data saved as .txt or .csv works too.
  2. Or click Paste data and paste cells copied from Excel or Google Sheets; they open as a table.
  3. For a public file, put its URL after rows.page/, for example https://rows.page/https://example.com/data.tsv.

DuckDB-WASM reads the file in your browser, and nothing is uploaded unless you press Share. A tab holds up to 1.5 GB; a bigger TSV loads partially with the note "Loaded the first N rows: the file is X, more than the browser can hold." A TSV that is not valid UTF-8 is read as Latin-1, but any byte from 0x80 to 0x9F, such as a Windows-1252 euro sign or curly quote, stops it from opening with "Couldn't open this data"; re-save the file as UTF-8.

The Columns panel shows each column's type, distinct count, share of empty values, min and max, and a histogram or the top 10 values. Filter with country:NL or price:>20, or run SQL against the table data. rows.page doesn't edit cells or let you override the detected delimiter.

Excel

Go to Data > From Text/CSV, pick the file and choose Tab as the delimiter. Excel keeps 15 significant digits, so longer numeric IDs lose digits unless you import that column as Text.

Google Sheets

Go to File > Import, upload the file and set the separator type to Tab. A spreadsheet holds up to 20 million cells or 100 MB.

How do you convert TSV to CSV?

  1. Open the TSV file on rows.page.
  2. Optionally filter, sort, hide columns or run SQL; Export always writes the current view.
  3. Open Export and pick CSV.

You get a comma-delimited UTF-8 file with a header row and no BOM. Cells that start with =, +, -, @, a tab or a carriage return get a leading apostrophe so spreadsheets don't run them as formulas. Filtered views export every matching row, SQL results up to 1,000,000 rows, and there is no option to pick another delimiter, encoding or BOM.

On the command line, DuckDB does the same conversion and quotes any value that contains a comma:

sql
COPY (SELECT * FROM read_csv('data.tsv', delim = '\t')) TO 'data.csv' (HEADER, DELIMITER ',');

rows.page limits and prices

WhatLimit or price
Open a file in your browserFiles up to 1.5 GB, $0, no account, nothing uploaded
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

What is the difference between .tsv and .tab files?

None in content: both are extensions for tab-separated values. rows.page opens both as TSV and also detects tabs inside .txt and .csv files.

Why do copied spreadsheet cells paste as tab-separated text?

Excel and Google Sheets put a copied range on the clipboard as tab-separated text, one row per line. Click Paste data on rows.page and those cells open as a table.

How big a TSV file can I open in rows.page?

Up to 1.5 GB per browser tab, with no row limit; the grid loads 100 rows at a time as you scroll. A bigger file loads partially with the note "Loaded the first N rows: the file is X, more than the browser can hold."

How do I share a TSV file with a link?

Press Share in the explorer or run curl -T data.tsv https://rows.page to get a https://rows.page/<id> link. Without an account you get 100 MB per request, 50 pushes and 1 GB per IP address per UTC day, and links expire after 7 days; signed in, Free keeps 10 datasets, Pro ($12 per month) 100 and Max ($39 per month) 1,000.

Can I get the average or median of a TSV column?

The Columns panel shows type, distinct count, empty share, min, max and a histogram, but no mean, median or standard deviation. Run SQL such as SELECT avg(price), median(price) FROM data, or FROM (SUMMARIZE data) for every column at once.