python实现的生产BOM实现标准输出
解决问题点拿到一个产品的BOM,有许多位号对应的原材料品番。
买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
处理之前
品番使用数量位号品番111C357,370,374-376,383-385,387-389品番211C14,15,131,221-223,235-237,241,242品番39C12,13,88,90,92,96,100,103,104品番48C111,112,115,117,119,121,122,130品番511C132,218-220,230-234,245,246品番648C257-280,290-304,307-310,317-321
处理之后
品番使用数量位号品番111C357品番111C370品番111C374品番111C375品番111C376品番111C383品番111C384品番111C385品番111C387品番111C388品番111C389品番211C14品番211C15品番211C131品番211C221品番211C222品番211C223品番211C235品番211C236品番211C237品番211C241品番211C242品番39C12品番39C13品番39C88品番39C90品番39C92品番39C96品番39C100品番39C103品番39C104品番48C111品番48C112品番48C115品番48C117品番48C119品番48C121品番48C122品番48C130品番511C132品番511C218品番511C219品番511C220品番511C230品番511C231品番511C232品番511C233品番511C234品番511C245品番511C246品番648C257品番648C258品番648C259品番648C260品番648C261品番648C262品番648C263品番648C264品番648C265品番648C266品番648C267品番648C268品番648C269品番648C270品番648C271品番648C272品番648C273品番648C274品番648C275品番648C276品番648C277品番648C278品番648C279品番648C280品番648C290品番648C291品番648C292品番648C293品番648C294品番648C295品番648C296品番648C297品番648C298品番648C299品番648C300品番648C301品番648C302品番648C303品番648C304品番648C307品番648C308品番648C309品番648C310品番648C317品番648C318品番648C319品番648C320品番648C321
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。
测试运行环境:
python版本 :python 3.7
IDE:Pycharm2022.1.1
模块使用:os,re,openpyxl,tkinter
源码:初次发表,源码如下:
# -*- coding:utf-8 -*-
"""
# @File : excel数据拆分.py
# @Author:chen
# @Date : 2024/1/5
# @Desc :
"""
import re
import os
from tkinter import filedialog
from openpyxl import load_workbook
# 定义文件夹路径
# folder_path = os.path.dirname(os.path.abspath(__file__))
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
# 列出文件夹中的所有文件和文件夹
files = os.listdir(data_dir)
# 遍历文件列表,筛选出文件名
file_names = for file in files if os.path.isfile(os.path.join(data_dir, file))]
print("需要处理的文件名:", file_names)
def parse(data):
list1 = []
if ',' in data[2]:
list2 = data[2].split(',')
# print(list2)
# print("*"*90)
list1 = for i in list2 if i is not '']
# print(list1)
elif ' ' in data[2]:
list2 = data[2].split(' ')
# print(list2)
# print("*"*90)
list1 = for i in list2 if i is not '']
else:
list1 = 2]]
# print(list1)
# 针对第一个字母的多个回路改进C300-335,350-405,407,268-275,520
# 问题点 回路没有字母的需要判断一下
new_list = []
first_id = list1[0]
if first_id.isdigit():# 判断回路是不是纯数字组成
first_id_str = ''
else:
first_id_str = re.findall(r'+', first_id)[0]
# 添加代替品
pa = ''
if len(data) >= 4:
pa = data[3]
for i in list1:
if '-' in i:
print("带-或空格的回路开始分解")
item = i.split('-')
item_start = item[0]
item_end = item[-1]
item_str = re.findall(r'+', item_start)
if item_str:
item_str = item_str[0]
else:
item_str = first_id_str
data_num = re.findall(r"\d+", item_start)
item_start_num = int(data_num[0])
item_end_num = int(re.findall(r"\d+", item_end)[0])
for a in range(item_start_num, item_end_num + 1):
c = item_str + str(a)
new_list.append(0], data[1], c, pa])
# print(item_str,item_start_num,item_end_num)
else:
if i.isdigit():
c = first_id_str + i
new_list.append(0], data[1], c, pa])
else:
new_list.append(0], data[1], i, pa])
print(new_list)
return new_list
def parse_data():
for name in file_names:
print(name)
if '.xls' in name:
wb = load_workbook(data_dir + name)
# print(data_dir+name)
sheet = wb.active
sheet_data = []
for rows in sheet:
row_list = []
for cell in rows:
row_list.append(cell.value)
sheet_data.append(row_list)
# print(sheet_data)
new_sheet_data = []
for items in sheet_data:
if items[2] == None:
continue
data = items[2]
if ',' in data or '-' in data or " " in data:
new_list = parse(items)
for parse_list in new_list:
new_sheet_data.append(parse_list)
# print(new_list)
else:
new_sheet_data.append(items)
# print(new_sheet_data)
sheet2 = wb.create_sheet("new_sheet")
print("创建新的sheet完成,sheet名:new_sheet")
for d in new_sheet_data:
if isinstance(d, list):
sheet2.append(d)
else:
print(d, "格式不对-->", type(d))
wb.save(data_dir + name)
wb.close()
print("分解完成")
if __name__ == '__main__':
parse_data()
侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
如有侵权联系邮箱:ruikelink@gmai.com
资源下载地址和密码(百度云盘):**** Hidden Message ***** 百度网盘信息回帖可见
本资源由Java自学网收集整理【www.javazx.com】 强烈支持楼主ing…… 顶 要赶紧学习了,走起 学编程 就这儿了 大佬厉害呀 学习编程好地方 加油 资料不错,赶快下载 想看------------------ 1111111好资源