diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-10-31 01:32:04 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-10-31 01:32:04 +0100 |
| commit | a7f1d363eaef9149e54e5846072e710713cca7a7 (patch) | |
| tree | 905abe3716133a6c2677d1b1882ff4d2227c150f /split-csv.py | |
| parent | 4cd8cbde8649d2ecb34556dd33cd9b19a5558033 (diff) | |
initial commit
Diffstat (limited to 'split-csv.py')
| -rw-r--r-- | split-csv.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/split-csv.py b/split-csv.py new file mode 100644 index 00000000..62dc1597 --- /dev/null +++ b/split-csv.py @@ -0,0 +1,46 @@ +import os +import sys +import csv +from math import ceil +import subprocess +import random + +import click + +@click.command() +@click.option('--count', '-c', default=2, help='Number of subdivisions.') +@click.option('--shuffle/--no_shuffle', default=False, help='Whether to shuffle.') +@click.argument('filename') +def split_csv(count, shuffle, filename): + """Split a CSV into groups.""" + with open(filename, 'r') as f: + reader = csv.reader(f) + lines = list(reader) + keys = lines[0] + lines = lines[1:] + + fn, ext = os.path.splitext(filename) + if shuffle: + random.shuffle(lines) + for index, chunk in enumerate(chunks(lines, count)): + out_fn = fn + '-' + str(index+1) + ext + write_csv(out_fn, keys, chunk) + # sys.exit(1) + +# Write a CSV +def write_csv(fn, keys, chunk): + print(fn) + with open(fn, 'w') as f: + writer = csv.writer(f) + if keys is not None: + writer.writerow(keys) + for row in chunk: + writer.writerow(row) + +# Split an array into chunks +def chunks(l, n): + n = max(1, ceil(len(l) / n)) + return (l[i:i+n] for i in range(0, len(l), n)) + +if __name__ == '__main__': + split_csv() |
