I have a txt file with 406'000 lines (100MB size) and would like to view it with Notepad++ instead of Excel, because it's much faster.
How can I separate columns with a tabulator delimiter?
I'm refering to this post: How to vertically align comma separated values in Notepad++?
I really appreciate the answer from zerokelvin:
You can use this python plugin script which utilizes the csv library which takes care of quoted csv and many other variants.
Setup:
- Use the plugin manager in Notepad++ to install the "Python script" plugin.
- Plugins->Python Script->New Script (name it something like CSVtoTable.py)
- 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))
- Open your CSV file in notepad++
- Click on Plugins->Python Script->Scripts->(The name you used in step 2)
- 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))
How can this Python script be modified if the delimiter is not a comma but a tabulator?
Addendum (Data File):
Rec# Cyc# Step TestTime StepTime Amp-hr Watt-hr Amps Volts State ES DPt Time ACImp/Ohms DCIR/Ohms Aux #1 Units VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8 VAR9 VAR10 VAR11 VAR12 VAR13 VAR14 VAR15
1 0 1 0d 00:00:0.140000000596046 0d 00:00:0.140000000596046 0.00001 0.00005 0.00000 3.41497 R 0 08/14/2017 16:42:26 0.00000 0.00000 12.71681 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
2 0 1 0d 00:00:0.140000000596046 0d 00:00:0.140000000596046 0.00001 0.00005 0.00000 3.41497 R 1 08/14/2017 16:42:26 0.00000 0.00000 12.71681 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000