Created
June 1, 2016 12:23
-
-
Save Tabea-K/e051905ba58ee96ae8b43a3161b7e00b to your computer and use it in GitHub Desktop.
Converts a file in csv format into markdown (rather macdown) format.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python | |
| """ | |
| Turns tab delimited data to macdown table format. | |
| Needs the csvtoolkit to be installed. | |
| """ | |
| import sys | |
| import os | |
| import tempfile | |
| import argparse | |
| def check_if_tool_installed(toolname): | |
| """ | |
| Checks, whether a tool is installed. | |
| Based on http://stackoverflow.com/a/11210185/897521 | |
| """ | |
| try: | |
| subprocess.call([toolname]) | |
| except OSError as e: | |
| if e.errno == os.errno.ENOENT: | |
| # handle file not found error. | |
| sys.stderr.write("%s was not found! Please install %s!" % (toolname, toolname)) | |
| exit (1) | |
| else: | |
| sys.stderr.write("%s couldn't start, please check if it is correctly installed!" % (toolname)) | |
| exit (1) | |
| # MAIN | |
| if __name__ == "__main__": | |
| # parse arguments | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('infile', | |
| nargs='?', | |
| type=argparse.FileType('r'), | |
| default=sys.stdin) | |
| parser.add_argument("--H", "--H", | |
| help="whether the csv data has a header", | |
| default=False, | |
| action="store_true") | |
| args = parser.parse_args() | |
| infile = args.infile | |
| temp_infile = False | |
| if infile.name == '<stdin>': | |
| temp_infile = tempfile.NamedTemporaryFile(delete=False) | |
| with open(temp_infile.name, 'w') as fh: | |
| for line in infile: | |
| fh.write(line) | |
| infile = temp_infile.name | |
| check_if_tool_installed('csvlook') | |
| temp_file = tempfile.NamedTemporaryFile(delete=False) | |
| if args.H: | |
| os.system('csvlook -t %s > %s' % (infile, temp_file.name)) | |
| else: | |
| os.system('csvlook -t -H %s > %s' % (infile, temp_file.name)) | |
| with open(temp_file.name, 'r') as fh: | |
| for i, line in enumerate(fh.readlines()): | |
| if set(line) == set('|+-\n'): | |
| if i == 2: | |
| new_line = line.replace('+', '|') | |
| else: | |
| continue | |
| else: | |
| new_line = line.strip().replace('\t', ' | ') | |
| if not new_line.strip() == "": | |
| print new_line.strip() | |
| os.remove(temp_file.name) | |
| if temp_infile: | |
| os.remove(temp_infile.name) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment