Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9658|回复: 23

python实现的生产BOM实现标准输出

[复制链接]

该用户从未签到

4

主题

167

帖子

336

积分

普通会员

Rank: 2

积分
336
发表于 2024-7-27 19:24:03 | 显示全部楼层 |阅读模式
解决问题点
/ c, a3 M. [" i: u. `  G1 J! R3 t拿到一个产品的BOM,有许多位号对应的原材料品番。/ @! ?1 Z3 z( q$ Y% r& g2 c* o

; c7 [0 w2 ?1 _* ~/ L+ d6 T买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
/ L1 h5 F$ W  @& k5 T: @! C/ _1 B' J0 W. M$ U8 L
处理之前. c1 A; y. ^! ?4 q4 C, o! s& c
[table][tr][td=1,1,109]品番[/td][td=1,1,72]使用数量[/td][td=1,1,274]位号[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C357,370,374-376,383-385,387-389[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C14,15,131,221-223,235-237,241,242[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C12,13,88,90,92,96,100,103,104[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C111,112,115,117,119,121,122,130[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C132,218-220,230-234,245,246[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C257-280,290-304,307-310,317-321* Y  a9 k9 @' R9 u9 n1 u1 |/ e

) s1 v8 n& K, S处理之后5 N- u/ z0 G2 ^- g9 D7 }
[table][tr][td=1,1,72]品番[/td][td=1,1,72]使用数量[/td][td=1,1,72]位号[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C357[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C370[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C374[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C375[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C376[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C383[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C384[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C385[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C387[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C388[/td][/tr][tr][td]品番1[/td][td]11[/td][td]C389[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C14[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C15[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C131[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C221[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C222[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C223[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C235[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C236[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C237[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C241[/td][/tr][tr][td]品番2[/td][td]11[/td][td]C242[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C12[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C13[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C88[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C90[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C92[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C96[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C100[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C103[/td][/tr][tr][td]品番3[/td][td]9[/td][td]C104[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C111[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C112[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C115[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C117[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C119[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C121[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C122[/td][/tr][tr][td]品番4[/td][td]8[/td][td]C130[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C132[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C218[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C219[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C220[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C230[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C231[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C232[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C233[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C234[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C245[/td][/tr][tr][td]品番5[/td][td]11[/td][td]C246[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C257[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C258[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C259[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C260[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C261[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C262[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C263[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C264[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C265[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C266[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C267[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C268[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C269[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C270[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C271[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C272[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C273[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C274[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C275[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C276[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C277[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C278[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C279[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C280[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C290[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C291[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C292[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C293[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C294[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C295[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C296[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C297[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C298[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C299[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C300[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C301[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C302[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C303[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C304[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C307[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C308[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C309[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C310[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C317[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C318[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C319[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C320[/td][/tr][tr][td]品番6[/td][td]48[/td][td]C3215 P! m" G% H# K, |& {3 R
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。/ u+ S# x% ]# [" f" V
测试运行环境:" d* l( ?  ?1 F* j
python版本 :python 3.7
3 f, ]4 I/ j6 ZIDE:Pycharm2022.1.1
5 l; S; ~2 i0 Z模块使用:os,re,openpyxl,tkinter' e3 K/ _. d6 E1 l

9 y2 n' w( o* W& M" P4 l$ t- a; L源码:初次发表,源码如下:! b; {- H/ x# O: @, B2 d9 t
# -*- coding:utf-8 -*-
1 i# `4 C- g9 D
"""
* {+ ]# |* v9 \- K& Z
# @File : excel数据拆分.py
9 S9 G8 s9 P/ R3 Q* J* W4 h
# @Author:chen
4 c* g* ]% P) d7 g% c& v
# @Date : 2024/1/5& z% p" C+ ]% b6 z, |
# @Desc :
7 w+ v. `8 w8 q# X( y9 ]1 ~! q
"""
" o- r1 ^8 c4 T* M" Q2 |% k0 P2 f
import re
/ G: O( M, n- o) e  q, T! n. @import os& [: t" M: F( a$ K
from tkinter import filedialog
# w  Z9 F5 T# j* |  \from openpyxl import load_workbook
% l6 V' Y1 z2 L5 k1 _# V; p& P( X2 I0 r& e
# 定义文件夹路径3 q2 F( p8 q" H+ t. a5 l+ C
# folder_path = os.path.dirname(os.path.abspath(__file__)). p- D- V+ {( U1 f# C- |2 x
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
, H! s. g% h, v& G
5 f% n" T9 H- [1 Z+ |
# 列出文件夹中的所有文件和文件夹
) l# [# V7 {( r* ]' C+ I: Z% x
files = os.listdir(data_dir)$ }* S2 M; I4 Y6 o" T
) Y( R( p* o9 \3 [% q* n
# 遍历文件列表,筛选出文件名  o0 M* M6 U" \4 I/ }
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
/ C2 v" X5 m- ~3 L3 k. Xprint("需要处理的文件名:", file_names)+ K& a" i; _% w' q% l# {
( l4 M8 A) M: L4 y$ j
8 u! S6 H8 f; i, J( L7 d" {8 `: N
def parse(data):0 E" h+ ^7 i( N1 @0 t
    list1 = []/ i- L& ~, _0 r/ {( {7 F
    if ',' in data[2]:0 ]9 G' x3 P1 E1 {9 f# ?
        list2 = data[2].split(',')
: f- y$ O- G8 @" c! v        # print(list2)
, X) k3 E) c  q
        # print("*"*90)5 g* ]8 H$ ~8 v5 t4 h2 D2 Q( |
        list1 = [i for i in list2 if i is not '']- c$ f; p! C- S2 b. r$ ^) c* z
        # print(list1): `3 D! @7 [* o2 T4 k3 s8 ]% w# }4 M
    elif ' ' in data[2]:
$ ^6 f$ a6 [) A        list2 = data[2].split(' ')$ U! n  Y! B" O  i; T2 j
        # print(list2)9 w& @* O1 a0 M! }0 U; K
        # print("*"*90)& b# _+ F4 k* C% g$ i, t. Q% a# i
        list1 = [i for i in list2 if i is not '']
5 T; A2 A3 d  T    else:
0 d# g  i. S% Y        list1 = [data[2]]
! S6 H% f& r# N        # print(list1)
3 H  S9 Q) I% G3 |
& P( c$ X' d4 [
    # 针对第一个字母的多个回路改进  C300-335,350-405,407,268-275,520
4 ?' \; k2 a$ Q6 p
    # 问题点 回路没有字母的需要判断一下% S2 y( c- A4 l$ ]+ b+ |
    new_list = []
2 _" E- _5 X$ D0 [# {" r: a    first_id = list1[0]
9 _+ I4 @: y- d    if first_id.isdigit():  # 判断回路是不是纯数字组成  l  k  d8 E' u: {
        first_id_str = ''
6 @. r  a  @5 V8 L6 ~/ n3 K
    else:" ?! ^( g* x" ^' H
        first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]: k) c3 L' o5 q, @' s$ ~7 V

3 M. D$ G0 i) ]- D% V* Y    # 添加代替品
; ]- f- V# \2 a# {
    pa = ''
* o- T) g) ^. f' T: w' Z
    if len(data) >= 4:9 t/ V) g/ \9 {, \" `' W
        pa = data[3]
/ V6 m! }9 P; [8 Z4 ]# [5 U; o0 p2 q% ~
    for i in list1:  j$ y3 L& ]5 Q  K$ M
        if '-' in i:2 T8 H& O/ q% {3 f2 O; ~
            print("-或空格的回路开始分解")/ X9 b$ o5 O8 S& t9 C+ T
            item = i.split('-')
6 ^3 @; h/ ?4 z1 h            item_start = item[0]
2 P2 j5 g/ Y) Y            item_end = item[-1]
& T" {1 q2 d* C7 g) y: C            item_str = re.findall(r'[a-zA-Z]+', item_start)
3 m  G' H% A0 [4 s" ]            if item_str:4 v2 y0 @8 j" ~  i( P
                item_str = item_str[0], ~, m7 c$ B/ [1 H6 a
            else:* c0 n, y( Q+ K) `- b
                item_str = first_id_str
+ i5 x+ K9 ~+ I  i            data_num = re.findall(r"\d+", item_start)
7 N! e8 o* D; H) {  M            item_start_num = int(data_num[0])2 w8 J" z& b3 e3 c9 X& F" m
            item_end_num = int(re.findall(r"\d+", item_end)[0])
  \" L' ?6 e4 g- m0 [4 E, v
4 p0 _- V9 p# u; V% Z- k            for a in range(item_start_num, item_end_num + 1):
( i' w) k$ z- T9 l5 N" y8 i& `                c = item_str + str(a)5 W$ F5 h( K4 `, b
* N% B! h7 c8 Y, o/ _
                new_list.append([data[0], data[1], c, pa])
# d3 q# J8 J1 C" e5 P0 _            # print(item_str,item_start_num,item_end_num)
! Q( q6 w5 A0 P: r( I
        else:
) j) C, s  g6 y6 N; \. `# a) N            if i.isdigit():
/ O0 B& r+ g- u. F' g3 Y                c = first_id_str + i
+ K: l' l7 Q7 M                new_list.append([data[0], data[1], c, pa])4 j0 c( }/ _, k) n. U) i
            else:
# M' V/ n9 }& C7 ?3 S* q% |! C! a& e                new_list.append([data[0], data[1], i, pa])% b& ?" V: {% Z
    print(new_list)
4 [. ^1 A1 e  s0 ^: C' ^- Z" Y" _    return new_list& s0 G( c4 \- W& S+ B
- u8 P6 v; O  ?; t) E
5 ]$ D. c& U. [* y+ O
def parse_data():
4 S" G( A9 v# C; |  o# m, }    for name in file_names:
( |( c9 ]7 V! x6 w( g        print(name)
8 n5 h1 o( o& X2 h% B        if '.xls' in name:
4 ]4 o+ J3 u1 T( U2 E% Z            wb = load_workbook(data_dir + name)8 \+ j, W4 k  j; B/ B" G
            # print(data_dir+name)
" G1 t1 N, O6 \& q0 F
            sheet = wb.active
( P. Q  U: J1 U% w( _            sheet_data = []
8 m/ l+ s0 e/ b' N2 |            for rows in sheet:; N: T" W6 y# u" ?  v
                row_list = []
* B( S! C, g2 W, L                for cell in rows:
% s6 Q) U; b' I2 Y/ T: e; p, B                    row_list.append(cell.value)/ v5 j2 x; }0 c& D' m8 V# G2 \/ H
                sheet_data.append(row_list)
2 T: B3 |  H$ c0 O+ e. A            # print(sheet_data)
1 Z% f" p# k. J5 B& H* ^. u) |& \
$ D9 q; ?  F* h" |
            new_sheet_data = []
, i6 k% I. A/ k, x: {3 J3 m            for items in sheet_data:
5 g: }! P: R3 H                if items[2] == None:- R( [3 h& I1 X9 Z
                    continue
9 \! \* O# f2 e# }9 G6 m
                data = items[2]
  k$ D% z0 m& o; W. Y                if ',' in data or '-' in data or " " in data:5 }& l8 U' l6 R: a5 S
                    new_list = parse(items)
: `" y2 u9 V" D" L" |                    for parse_list in new_list:% d8 ^: d- ?8 e  v( r8 G
                        new_sheet_data.append(parse_list). X$ W, W4 c" i# q+ T. X
                    # print(new_list)# H1 n9 e' A! s* u, s0 h* E2 o

- Y1 Z6 M7 Q, L& S7 ]' _* s
                else:/ F7 a& B2 D( {! _/ `5 ]
                    new_sheet_data.append(items)( d3 O6 U9 ~9 F  n, |
            # print(new_sheet_data)
& t0 d, L2 k" m- I
            sheet2 = wb.create_sheet("new_sheet")
* l. o6 l9 ^# a5 @            print("创建新的sheet完成,sheet名:new_sheet")
- \$ Z2 W% |) U$ f            for d in new_sheet_data:
8 I6 E) V1 x8 S$ r5 {0 [                if isinstance(d, list):4 P% j: f" X! B5 |7 Z& c$ J! d
                    sheet2.append(d), e& o+ b, v0 [
                else:2 V+ w1 p6 K& n1 l" H- s7 v! |  Z
                    print(d, "格式不对-->", type(d)), j8 \& c: }  t9 d  L! Z6 a
            wb.save(data_dir + name)6 c' z! c" c5 L9 l2 X6 D0 f/ F! y
            wb.close()
- ^) F, i1 `! k; c* t8 T            print("分解完成")2 M+ Y6 O, _) w

/ {* h0 S4 i8 @/ K+ x* J! v( X! K4 {  ^/ S$ O' E" H8 @
if __name__ == '__main__':  P/ x: S* F4 r4 p$ v
    parse_data()
2 }5 B& |; n! g/ C* X
+ U* V' ~4 D3 N1 V# b' Z7 \# d0 p
0 c% \2 s4 J( g) _! U, C
9 a$ P8 q3 ?# `
; v' p" h! e" S% u侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
/ _- @4 t9 J2 P) x$ [( A' t3 y2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除+ y$ ?: |( a& g2 w* E
3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
5 x# f& i& `8 z# Y  R2 P# o4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
) F# T3 g  `' Y, O1 X如有侵权联系邮箱:ruikelink@gmai.com! d6 N- c+ \' i8 S: D
资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见' T8 y! ?/ ]8 M# O! o; z8 _
) X' R2 m. C" v# V* a. |
/ t: o- s9 ]5 }" G( [3 W. W
/ H( x0 h* p! q4 O8 l8 x- w
本资源由Java自学网收集整理【www.javazx.com】
回复

使用道具 举报

该用户从未签到

5

主题

151

帖子

301

积分

普通会员

Rank: 2

积分
301
发表于 2024-7-27 19:44:14 | 显示全部楼层
强烈支持楼主ing……
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

4198

帖子

8399

积分

普通会员

Rank: 2

积分
8399
发表于 2024-8-5 23:48:32 | 显示全部楼层
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

4106

帖子

8214

积分

普通会员

Rank: 2

积分
8214
发表于 2024-8-6 18:52:44 | 显示全部楼层
要赶紧学习了,走起
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

4166

帖子

8334

积分

普通会员

Rank: 2

积分
8334
发表于 2024-8-6 20:55:09 | 显示全部楼层
学编程 就这儿了
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

4106

帖子

8212

积分

普通会员

Rank: 2

积分
8212
发表于 2024-8-9 18:09:47 | 显示全部楼层
大佬  厉害呀
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    2017-2-9 10:41
  • 签到天数: 5 天

    [LV.2]登堂入室

    0

    主题

    4127

    帖子

    8320

    积分

    普通会员

    Rank: 2

    积分
    8320
    发表于 2024-8-13 12:01:17 | 显示全部楼层
    学习编程好地方 加油
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4076

    帖子

    8154

    积分

    普通会员

    Rank: 2

    积分
    8154
    发表于 2024-8-20 11:26:25 | 显示全部楼层
    资料不错,赶快下载
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4267

    帖子

    8536

    积分

    普通会员

    Rank: 2

    积分
    8536
    发表于 2024-8-25 22:25:07 | 显示全部楼层
    想看------------------
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4227

    帖子

    8454

    积分

    普通会员

    Rank: 2

    积分
    8454
    发表于 2024-9-7 09:19:08 | 显示全部楼层
    1111111好资源
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-11-24 10:47 , Processed in 0.304539 second(s), 29 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表