Skip to content

Instantly share code, notes, and snippets.

@babldev
Created April 6, 2024 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save babldev/ab544679f445a96a465f530541086511 to your computer and use it in GitHub Desktop.
Save babldev/ab544679f445a96a465f530541086511 to your computer and use it in GitHub Desktop.
Kicad BOM to JLCPCB BOM convert
import argparse
import csv
def convert(args):
# Read the input CSV file
with open(args.csv_file, 'r') as file:
csv_reader = csv.DictReader(file)
data = list(csv_reader)
# Group the data by JLCPCB Part #
grouped_data = {}
for row in data:
part_number = row[args.column]
if part_number not in grouped_data:
grouped_data[part_number] = {
'Comment': row['Value'],
'Designator': row['Reference'],
'Footprint': row['Footprint'].split(':')[-1],
'JLCPCB Part #': part_number
}
else:
grouped_data[part_number]['Designator'] += ',' + row['Reference']
# Write the grouped data to a new CSV file
with open('output.csv', 'w', newline='') as file:
fieldnames = ['Comment', 'Designator', 'Footprint', 'JLCPCB Part #']
csv_writer = csv.DictWriter(file, fieldnames=fieldnames)
csv_writer.writeheader()
for part_number, row in grouped_data.items():
csv_writer.writerow(row)
def run():
parser = argparse.ArgumentParser(description='Group CSV data by JLCPCB Part #')
parser.add_argument('csv_file', help='Path to the input CSV file')
parser.add_argument('-c', '--column', default='JLCPCB Part #', help='Override the column name for JLCPCB Part # (default: "JLCPCB Part #")')
args = parser.parse_args()
convert(args)
if __name__ == '__main__':
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment