采购清单BOM的生成

问题:

公司在原型板焊接的时候,经常需要采购多块板子的器件,而其中很多器件型号都是相同的。采购部门会要求我们把所有相同的型号归类。

这是一件耗时而又无趣的工作, 所以需要最好能够自动生成采购清单。

解决办法:

因为我们的BOM文件都是excel格式, 而经常看到Python培训的广告, 展示其能够处理excel的强大功能。

因此选择使用Python自己写一个程序来执行合并操作。

解决步骤:

1, 首先看看我们的BOM表的格式

对于采购人员来说, Designator 和footprint是不需要关注的, 他们关注点主要在器件型号, 厂家以及购买数量和购买渠道。

采购清单的格式主要如下

2, Python, 你强你上

附上具体的代码, 本人第一次写Python,肯定有不优雅的地方,欢迎高手们将程序改进。

import pandas as pd
import os
import numpy as np#how to use
#1, copy all board BOMs to same directory with this python file
#2, Run this script in python IDE or other python software
#3, input the QTY for each board
#4, it generate a Purchase.xlsx in current folderoutput_file_name="Purchase.xlsx"
fileNames=[]keyCode="StockCode"
Comment="Comment"
Desc="Description"
QTY="Quantity"
Manufature="Manufature"
Mpart="Manufacture  part"
Supplier="Supplier1"
SPart="Suppiler1 part"#finalCols=[keyCode, Comment, Desc, Manufature, Mpart, Supplier, SPart, QTY]def pre_process_excelfile(excel_files):global  fileNamespath, fileName = os.path.split(excel_files)fileName, file_extension = os.path.splitext(fileName)#read excel filedataframe = pd.read_excel(excel_files);#search position of Stockcode inrow_start=Nonefor row in range(dataframe.shape[0]): for col in range(dataframe.shape[1]):if dataframe.iat[row,col] == keyCode:row_start = rowkeyCodeColumn=col#print(row_start)break;#set column names and delete file header partif(row_start is None):print("stockCode not found, not BOM file\n")elif(row_start > 1):dataframe.columns = dataframe.iloc[row_start]dataframe.drop(dataframe.index[row_start], inplace=True)dataframe.drop(dataframe.index[range(0,row_start)],axis=0, inplace=True)#delete file tailsdataframe=dataframe.loc[dataframe[keyCode].notnull()]#delete columnsdataframe = dataframe.dropna(axis = 1, how = 'all')#pick up columns and change  qty column namedataframe = dataframe[[keyCode, Comment, Desc, Manufature, Mpart, Supplier, SPart, QTY]]dataframe.columns = dataframe.columns.str.replace(QTY,fileName)fileNames.append(fileName)#input QTY boards for assemblyBOMQty=input("How manmy boards needed for "+fileName +" ?")print(BOMQty)dataframe[fileName+'.QTY']= BOMQtyreturn dataframe#
path=os.getcwd()
print(path)#delete output file to avoid combining it
outputFile=os.path.join(path, output_file_name)
if os.path.isfile(outputFile):os.remove(outputFile)result=pd.DataFrame()
for filename in os.listdir (path):if filename.endswith ('.xlsx'):read_filename=os.path.join(path, filename)dataframe=pre_process_excelfile(read_filename)if(result.empty):result=dataframe;else:result = result.merge(dataframe, on=[keyCode, Comment, Desc, Manufature, Mpart, Supplier, SPart], how='outer', sort=True)#sort data according to StockCode
dataframe=result
dataframe=dataframe.sort_values(by=keyCode)
dataframe.groupby(keyCode)#fill nan with 0 in order to do multipy operation
dataframe.replace(np.nan, 0, inplace=True)#calculate total
dataframe['total']=0
for eachfile in fileNames:dataframe[eachfile] = dataframe[eachfile].astype(int)dataframe[eachfile+'.QTY'] = dataframe[eachfile+'.QTY'].astype(int)dataframe['total']=dataframe['total']+(dataframe[eachfile]) * (dataframe[eachfile+'.QTY'])#fill back with nan
dataframe.replace(0,np.nan, inplace=True)#writeback a excel file
result_filename=os.path.join(path, output_file_name)
dataframe.to_excel(result_filename, index = False)print("Done, and Generate "+ output_file_name + " at " +path +" !")

3, 代码的使用方法

1, 拷贝代码并保存为merge excels.py

2, 安装PythonIDLE

本人使用的版本是3.8.2

3, 拷贝各个PCB板的对应BOM文件到相同目录下, 和merge excels.py在同一目录。

4,运行PythonIDLE

File->open(merge excels.py)

然后直接run

根据提示输入制板的数量。 本人在这里展示了板子1需要购买的元器件的套数是10, 板子2的套数是20

当前目录下会生成新的文件Purchase.xlsx。

文件中的H列是单个板子1的数量, 列I是板子的套数。J列是单个板子2的数量, 列K是板子的套数

最后的总数total=H*I+J*K.

由Python生成采购清单BOM相关推荐

  1. pipreqs生成python项目依赖清单

    pipreqs生成python项目依赖清单 环境 pip install pipreqs 在项目目录下 pipreqs ./ 报错: Traceback (most recent call last) ...

  2. python 字典 列表 速度_高效使用Python字典的清单

    字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界",字典在Python中的重要性不言而喻,这里整理了几个关于高效使 ...

  3. python生成csv乱码

    python 生成 csv乱码: 从本地生成的csv通过flask传输下载全乱码了,但是在本地读取正常. 解决问题尝试查到比较多的方案: encoding='utf-8' encoding='utf- ...

  4. 使用OpenCV和Python生成视频条形码

    使用OpenCV和Python生成视频条形码 1. 效果图 2. 原理 2.1 步骤 2.2 项目结构 3. 源码 参考 这篇博客将演示如何使用Python + OpenCV生成视频条形码. 生成视频 ...

  5. python生成订单号或生成任意序列

    python生成订单号或生成任意序列 示例代码: import time# 生成订单号 def get_order_code():# 年月日时分秒+time.time()的后7位order_no = ...

  6. 独家 | 手把手教你怎样用Python生成漂亮且精辟的图像(附教程代码)

    作者:Fabian Bosler 翻译:车前子 校对:吴振东 本文约4800字,建议阅读15分钟. 本文将介绍如何利用Python生成图像并将结果做出可视化分析. 在上周的文章<用python从 ...

  7. Python生成随机五位数——模仿手机验证码

    使用Python生成随机的五位手机验证码. # -*- coding:utf-8 -*-#生成五位随机数,模仿手机验证码#导入random库,可以生成随机数 import randomdef ran( ...

  8. python生成时间戳_python生成13位或16位时间戳以及反向解析时间戳的实例

    我就废话不多说了,直接上代码吧! import datetime import time def get_float_time_stamp(): datetime_now = datetime.dat ...

  9. python 词云_利用Python生成词云

    利用Python生成词云 一.第三方库的安装与介绍 1.1  Python第三方库jieba(中文分词) 1.介绍 "结巴"中文分词:做最好的 Python 中文分词组件. 2.特 ...

最新文章

  1. db9小波包分解matlab,小波包分解、重构 matlab代码
  2. 2015年部分互联网公司笔试综合题及答案
  3. 如果你恨一个程序员,忽悠他去做iOS开发
  4. html基本标签与属性
  5. php css布局技巧,最全的CSS开发常用技巧
  6. GPS/轨迹追踪、轨迹回放、围栏控制
  7. Java工作笔记-Nginx配置IPHash(单点登录)
  8. ac automaton 专题
  9. hibernate4调用mysql存储过程_Hibernate4.x执行mysql的存储过程
  10. linux es数据库 head,Elasticsearch可视化插件ES-HEAD安装启动步骤
  11. java8的下载与安装(网上教程的安装方法)
  12. 201015.阅读和了解什么是形式化方法
  13. 关于APP接口设计 注意事项
  14. pdf 加深 扫描件_扫描文字字体如何加深 pdf扫描件字体加深
  15. 学习人工智能导论(3)
  16. 使用LSTM神经网络+CTC loss识别freetype库生成的不定长验证码
  17. C++基础算法 | 单调栈(Monotonous Stack)
  18. python春节对客流量的影响_2018年2月各城市地铁日均客流、春节长假日均客流分析...
  19. 期货市场倒挂什么意思(期货市场倒挂什么意思啊)
  20. [DP]Apple Catching G

热门文章

  1. 高效学习的六大必备工具
  2. 什么是ERP?电商ERP和传统ERP到底有什么不同?
  3. Appium-实现手势密码登陆
  4. SNOWFLAKE(雪花ID)的实现
  5. 2019百家号自媒体推荐机制
  6. day46第九章动态规划(二刷)
  7. html如何实现自动登录,JS实现两周内自动登录功能
  8. 实现局域网内其他设备访问服务器
  9. SSM+Maven+MySQL实现简易的挂机修仙页游
  10. Shutdown用法