"category": "inspect-and-test",

CSV Viewer

"tldr": Paste CSV or open a file and read it as a real table - sticky headers, live row filtering, quoted fields parsed correctly.

Read CSV the way it was meant to be read - as a table. Paste content or open a .csv file and get sticky headers, numbered rows, live text filtering, and correct parsing of the hard parts: quoted fields, embedded commas, and multi-line values per RFC 4180.

{"view": "csv"}

Raw CSV in a text editor hides its problems - a shifted column from an unquoted comma looks fine until row 3,041. Rendering as a table makes misalignment instantly visible, which makes this as much a debugging tool as a viewer. Files open locally; nothing is uploaded.

How to view a CSV file

  1. 1Paste CSV text (first row = headers) or open a .csv file.
  2. 2The table renders with sticky headers and numbered rows.
  3. 3Type in the filter box to keep only rows containing your text.
  4. 4Need it as data? Convert the same content with CSV to JSON.

Convert CSV to Table in code

Python (pandas)
import pandas as pd

df = pd.read_csv("data.csv")
print(df.head(20))       # quick look
print(df.describe())     # column stats
Command line
column -s, -t < data.csv | less -S   # quick aligned view
# proper CSV tooling:
pip install csvkit && csvlook data.csv

Frequently asked questions

My columns are shifted after a certain row - what is wrong?

Almost always an unquoted comma inside a value ("Smith, John" without quotes becomes two fields) or an unbalanced quote swallowing rows into one field. Find the first misaligned row in the table - the offending value is on that line of the source.

Does it handle semicolon- or tab-separated files?

This viewer parses comma-separated per RFC 4180. Semicolon CSVs (common from European Excel locales) render as one column - replace ; with , first, or export as real CSV. Tab-separated files: replace tabs with commas, or use Excel to JSON which reads TSV natively.

How large a file can I open?

Parsing handles megabytes easily; rendering caps at the first 500 matching rows to keep the browser responsive, with a note showing the true total. Filtering searches all rows, not just the rendered ones.

Last updated:

You might also need

Free and in-browser, like everything on JSON Console. Browse all tools →