The Python project is discontinued
Thanks for all your contributions! At this time I'm not continuing development on the Python version of this tool.
I'm moving work to the following JS projects:
I'm happy to point to your projects if you decide to take over development on the Python version or create a CLI for the JS version! Just let me know.
-----
Convert your CSV files into Markdown tables.
Tables Generator is a fantastic web tool for converting tabular data into all sorts of table layouts. I like how it lets me import CSV files, but I need the ability to convert many CSV files in batch for a docset on which I'm working.
I built csvtomd
to convert one or more CSV files into nicely-padded Markdown tables. Now you can build your tables in Excel and convert them for use in GitHub Markdown files without having to construct them by hand.
# Installation
This is a Python 3 script, so use pip3
to install:
pip3 install csvtomd
After this, run csvtomd --help
from your terminal to verify it's installed properly.
# Usage
csvtomd MY_SPREADSHEET.csv
generates a Markdown table from MY_SPREADSHEET.csv
.
csvtomd SHEET1.csv SHEET2.csv SHEET3.csv
generates three Markdown tables from the input files and displays them alongside the input filename.
csvtomd
or csvtomd -
generates a Markdown table from standard input. You can type CSV data or pipe a file in.
## Example Input
File: thrones.csv
First Name,Last Name,Location,Allegiance
Mance,Rayder,North of the Wall,Wildlings
Margaery,Tyrell,The Reach,House Tyrell
Danerys,Targaryen,Meereen,House Targaryen
Tyrion,Lannister,King's Landing,House Lannister
## Example Markdown Table
Command: csvtomd thrones.csv
First Name | Last Name | Location | Allegiance ------------|-------------|---------------------|----------------- Mance | Rayder | North of the Wall | Wildlings Margaery | Tyrell | The Reach | House Tyrell Danerys | Targaryen | Meereen | House Targaryen Tyrion | Lannister | King's Landing | House Lannister
## Example Raw Output
Command: csvtomd thrones.csv
First Name | Last Name | Location | Allegiance
------------|-------------|---------------------|-----------------
Mance | Rayder | North of the Wall | Wildlings
Margaery | Tyrell | The Reach | House Tyrell
Danerys | Targaryen | Meereen | House Targaryen
Tyrion | Lannister | King's Landing | House Lannister
Command: csvtomd --padding 0 thrones.csv
First Name|Last Name|Location |Allegiance
----------|---------|-----------------|---------------
Mance |Rayder |North of the Wall|Wildlings
Margaery |Tyrell |The Reach |House Tyrell
Danerys |Targaryen|Meereen |House Targaryen
Tyrion |Lannister|King's Landing |House Lannister
## Requirements
Python 3.
Tested with Python 3.4.1 on Mac OS X 10.9.3.
Doesn't require any external packages, so it should be platform-agnostic.
## Help
Command: csvtomd --help
usage: csvtomd.py [-h] [-n] [-p PADDING] [-d DELIMITER] csv_file [csv_file ...]
Read one or more CSV files and output their contents in the form of Markdown
tables.
positional arguments:
csv_file One or more CSV files to be converted
optional arguments:
-h, --help show this help message and exit
-n, --no-filenames Don't display filenames when outputting multiple
Markdown tables.
-p PADDING, --padding PADDING
The number of spaces to add between table cells and
column dividers. Default is 2 spaces.
-d DELIMITER, --delimiter DELIMITER
CSV delimiter, expected values: ',', ';'. Default is ,
# Contributions
Bug reports, fixes, or features? Feel free to open an issue or pull request any time.
## Testing
I only accept pull requests for features with tests.
<div class="codehilite">
<pre><span></span><code><span class="c1"># Run tests in the project root</span>
$<span class="w"> </span>py.test
<span class="o">=============================</span><span class="w"> </span><span class="nb">test</span><span class="w"> </span>session<span class="w"> </span><span class="nv">starts</span><span class="w"> </span><span class="o">==============================</span>
platform<span class="w"> </span>darwin<span class="w"> </span>--<span class="w"> </span>Python<span class="w"> </span><span class="m">3</span>.5.0,<span class="w"> </span>pytest-3.0.5,<span class="w"> </span>py-1.4.31,<span class="w"> </span>pluggy-0.4.0
rootdir:<span class="w"> </span>/your/path/to/csvtomd,<span class="w"> </span>inifile:
collected<span class="w"> </span><span class="m">3</span><span class="w"> </span>items
test/test_csvtomd.py<span class="w"> </span>...
<span class="o">===========================</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>passed<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">0</span>.04<span class="w"> </span><span class="nv">seconds</span><span class="w"> </span><span class="o">===========================</span>
</code></pre>
</div>
## Releasing
<div class="codehilite">
<pre><span></span><code><span class="c1"># Bump version number in setup.py and csvtomd.py</span>
<span class="c1"># Delete old builds</span>
rm<span class="w"> </span>-rf<span class="w"> </span>dist
<span class="c1"># Build source and binary wheel distribution</span>
python<span class="w"> </span>setup_wrap.py<span class="w"> </span>sdist<span class="w"> </span>bdist_wheel
<span class="c1"># Upload to PyPI</span>
pip<span class="w"> </span>install<span class="w"> </span>twine
twine<span class="w"> </span>upload<span class="w"> </span>dist/*
</code></pre>
</div>
[Here's an actual guide to PyPI.](https://packaging.python.org/distributing/) [And another really good one.](https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/)
# License
Copyright (c) 2017 Matthew Lewis. Licensed under [the MIT License](http://opensource.org/licenses/MIT).