How to vertically align comma separated values in Notepad++?

Maybe not exactly what you're looking for, but I recently added a CSV Lint plug-in to Notepad++ which also adds syntax highlighting for csv and fixed width data files, meaning each column gets a different color so it's easier to see.

CSV Lint syntax highlighting columns


You can use the TextFX plugin: Edit > Line Up multiple lines by ...

Note: This doesn't work if the file is read only.

http://tomaslind.net/2016/02/18/how-to-align-columns-in-notepad/

Update 2019: Download link from SourceForge


You can use this python plugin script which utilizes the csv library which takes care of quoted csv and many other variants.

Setup:

  1. Use the plugin manager in Notepad++ to install the "Python script" plugin.
  2. Plugins->Python Script->New Script (name it something like CSVtoTable.py)
  3. Paste the following python script into the new file and save:

CSVtoTable.py

import csv

inputlines = editor.getText().split('\n')
# Get rid of empty lines
inputlines = [line.strip() for line in inputlines if line.strip()]
reader = csv.reader(inputlines, delimiter=',')
csvlist = [line for line in reader]
# transpose to calculate the column widths and create a format string which left aligns each row
t_csvlist = zip(*csvlist)
col_widths = [max([len(x) for x in t_csvlist[y]]) for y in range(len(t_csvlist))]
# To right align - change < to >
fmt_str = ' '.join(['{{:<{0}}}'.format(x) for x in col_widths]) + '\r\n'

text = []
for line in csvlist: 
    text.append(fmt_str.format(*line))

# open a new document and put the results in there.    
notepad.new()
editor.addText(''.join(text))
  1. Open your CSV file in notepad++
  2. Click on Plugins->Python Script->Scripts->(The name you used in step 2)
  3. A new tab with the formatted data should open.

Update (right aligned numbers & left aligned strings):

Use the following python script if you want to right align number fields from the CSV - it looks at the second line of the csv to determine the types of the fields.

import csv
import re

num_re = re.compile('[-\+]?\d+(\.\d+)?')

inputlines = editor.getText().split('\n')
# Get rid of empty lines
inputlines = [line.strip() for line in inputlines if line.strip()]
reader = csv.reader(inputlines, delimiter=',')
csvlist = [line for line in reader]

# Transpose to calculate the column widths and create a format string which left aligns each row
t_csvlist = zip(*csvlist)
col_widths = [max([len(x) for x in t_csvlist[y]]) for y in range(len(t_csvlist))]

# Numbers get right aligned
type_eval_line = csvlist[1 if len(csvlist)>1 else 0]
alignment = ['>' if num_re.match(item) else '<' for item in type_eval_line]

# Compute the format string
fmt_str = ' '.join(['{{:{0}{1}}}'.format(a,x) for x,a in zip(col_widths,alignment)]) + '\r\n'

text = []
for line in csvlist: 
    text.append(fmt_str.format(*line))

# open a new document and put the results in there.    
notepad.new()
editor.addText(''.join(text))

Tags:

Csv

Notepad++