You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.3 KiB
53 lines
2.3 KiB
import csv
|
|
import argparse
|
|
|
|
def compareAndAdd(base_file, field_base, compare_file, field_compare, field_to_add, output_csv):
|
|
# Read the base CSV file into a list of dictionaries
|
|
with open(base_file, 'r', newline='', encoding='utf-8') as csv_file_base:
|
|
csv_base = list(csv.DictReader(csv_file_base))
|
|
|
|
# Read the compare CSV file into a list of dictionaries
|
|
with open(compare_file, 'r', newline='', encoding='utf-8') as csv_file_compare:
|
|
csv_compare = list(csv.DictReader(csv_file_compare))
|
|
|
|
# Create a mapping of field_compare to the field_to_add from the compare CSV
|
|
compare_mapping = {row[field_compare]: row[field_to_add] for row in csv_compare}
|
|
|
|
# Define the output file's fieldnames
|
|
fieldnames = list(csv_base[0].keys()) + [field_to_add]
|
|
|
|
# Open the output CSV file to write the combined data
|
|
with open(output_csv, 'w', newline='', encoding='utf-8') as new_file:
|
|
csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames, delimiter=',')
|
|
csv_writer.writeheader()
|
|
|
|
# Iterate through the base CSV and add the field_to_add from the compare CSV if field_base matches field_compare
|
|
for line_base in csv_base:
|
|
key = line_base[field_base]
|
|
if key in compare_mapping:
|
|
line_base[field_to_add] = compare_mapping[key]
|
|
else:
|
|
line_base[field_to_add] = None # or some default value if no match is found
|
|
csv_writer.writerow(line_base)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description='Compare and add fields from one file to another.')
|
|
parser.add_argument('base_file', help='The path to the base file')
|
|
parser.add_argument('field_base', help='The field name in the base file to compare')
|
|
parser.add_argument('compare_file', help='The path to the compare file')
|
|
parser.add_argument('field_compare', help='The field name in the compare file to compare')
|
|
parser.add_argument('field_to_add', help='The field name in the compare file to add to the base file')
|
|
parser.add_argument('output_file', help='The path to the output file')
|
|
args = parser.parse_args()
|
|
|
|
compareAndAdd(
|
|
args.base_file,
|
|
args.field_base,
|
|
args.compare_file,
|
|
args.field_compare,
|
|
args.field_to_add,
|
|
args.output_file
|
|
)
|
|
|