This commit is contained in:
Mal 2025-01-30 00:18:09 +01:00
commit f13038b0c8

69
csvtrans.py Executable file
View File

@ -0,0 +1,69 @@
#!/usr/bin/env python3
import sys
import argparse
parser = argparse.ArgumentParser(
prog='CSV Transformer',
description='Creates a new CSV from another CSV file with all desired (renamed) columns in the desired order.'
)
parser.add_argument('file', help='The CSV file to edit.')
parser.add_argument('-c', '--columns', required=True, help='The columns to keep, rename (=) or to add (+) comma separated (Example: "Test,One=Two,+Three")')
parser.add_argument('-o', '--output', help='The name of the output file (if not specified the output will be written to the console)')
args = parser.parse_args()
columns_wanted = args.columns.split(',')
with open(args.file, 'r') as file:
csv = file.read()
lines = csv.split('\n')[:-1]
columns = lines[0].split(';')
new_head = []
column_to_column = []
for i,c in enumerate(columns_wanted):
if c.find('=') != -1:
old_name, new_name = c.split('=')
else:
old_name = c
new_name = c
new_head.append(new_name.replace('+', ''))
if old_name.startswith('+'):
index_old = None
else:
try:
index_old = columns.index(old_name)
except ValueError:
print('Error: The column %s does not exist!' % (old_name))
sys.exit(1)
column_to_column.append(index_old)
new_lines = []
for l in lines[1:]:
new_line = []
fields = l.split(';')
for i,c in enumerate(column_to_column):
if c is None:
new_line.append('')
else:
new_line.append(fields[c])
new_lines.append(';'.join(new_line))
output = ';'.join(new_head) + '\n'.join(new_lines)
if args.output is None:
print(output)
else:
with open(args.output, 'w') as file:
file.write(output)