Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10295|回复: 33

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

[复制链接]

该用户从未签到

4

主题

172

帖子

336

积分

普通会员

Rank: 2

积分
336
发表于 2024-7-27 19:24:03 | 显示全部楼层 |阅读模式
解决问题点" H6 _, @$ Z( u7 q; S1 ]) f
拿到一个产品的BOM,有许多位号对应的原材料品番。
- L0 }- p6 _; R2 ?# A( T# L
: t, S* e% h3 H4 f买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
! N( t8 K0 t2 [0 H  q% ?2 j, X9 r3 r; S% R
处理之前
# ~4 q0 d$ K) o4 d! p4 m/ F[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-3215 p% F. B  j6 K; G8 _0 v2 K

& T9 O3 h! Y" H5 E% \" O* ?处理之后+ b+ h% k& c1 N4 Q+ X) d
[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]C321
, L  E; {) B1 q! _" L3 {, d如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。. Q- D* o0 _- L1 Y2 @; i* P
测试运行环境:
8 w1 I7 t6 a4 F3 z7 F+ lpython版本 :python 3.7
, }  ~: j: q1 j! b4 o* MIDE:Pycharm2022.1.1
! v- E! G1 _6 Y5 m; C模块使用:os,re,openpyxl,tkinter9 P1 L  @4 U$ Q8 {. \( w6 ]8 @

8 t2 m: E# l' y2 r" N源码:初次发表,源码如下:
( j6 O! w9 |& \$ I* e# -*- coding:utf-8 -*-7 `) i4 B2 e* p8 \% I* D
"""; U7 H% x) S& Q1 T6 t$ u, ]1 U
# @File : excel数据拆分.py
& q8 g2 x9 A2 _( A0 a& T
# @Author:chen0 m) z+ e: Y5 T
# @Date : 2024/1/5" b! m$ f9 x: A4 M6 s& q
# @Desc :6 U' K: o* s+ k* Q. c% @5 [! a( i% n2 A
"""/ H8 v. W& U) E1 m9 R4 V
import re
* F& h  N8 t# z3 t& n; }import os
' q5 i1 f' ^1 h9 L& H: |* X1 m, tfrom tkinter import filedialog
7 o& e( _0 e$ N8 W+ k) Xfrom openpyxl import load_workbook6 e9 p% \+ h+ B
- F6 X4 e" b, h" J$ `
# 定义文件夹路径
1 e* l; t( F. ~3 x. p; O
# folder_path = os.path.dirname(os.path.abspath(__file__))7 o, e# t0 K8 g( G, P7 |- I
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
  v4 i$ L. H8 l5 a+ W3 q; g! C

$ }5 \5 X! L9 h4 B: e0 J
# 列出文件夹中的所有文件和文件夹0 ?4 a* c8 U3 G* ^! m+ u
files = os.listdir(data_dir)
9 ^* a) G) g4 v6 j9 @7 Q8 M1 v6 a5 c9 [2 A# k! ]; k
# 遍历文件列表,筛选出文件名; d* j2 i: b; Z$ @) c
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]7 S/ ]9 m! P8 f& h& _( R9 B
print("需要处理的文件名:", file_names): e4 l" N! B8 m4 R- J& N: v

2 |5 D$ I: ~* f: q4 U* E+ t
/ T6 ]- R: K. Y  M  e- |$ j6 _def parse(data):
$ M. k1 c" x9 ?* J    list1 = []
% n$ _! |( N7 T3 k: K2 K    if ',' in data[2]:
2 J) H. Z+ [" y& r        list2 = data[2].split(',')
$ T- p8 N; E  P8 q- V, ^: j        # print(list2)( x+ w* t4 d4 _0 d
        # print("*"*90)2 ?6 T7 l0 c8 P9 {+ j5 B
        list1 = [i for i in list2 if i is not ''], s8 P: _8 u3 B  n- l+ }9 t
        # print(list1)
& O2 h- z: ]1 G4 T7 w/ i
    elif ' ' in data[2]:7 a( _7 o- c/ J( B* x
        list2 = data[2].split(' ')
% u& w3 M9 [# J2 A$ U! I        # print(list2)
1 a$ X8 m' ]. w7 Y: [
        # print("*"*90). O) I6 n; f; U
        list1 = [i for i in list2 if i is not '']
) G7 j: o) C" h- K+ J. q6 Q; r6 a( S9 G, {    else:' U) y- @) l8 N
        list1 = [data[2]]/ T3 M/ O9 H' F$ H# g9 ?" S* C
        # print(list1)
2 u" ?6 g2 v5 J+ r/ b  Z

  e8 W8 P3 |8 M2 @0 F. W1 p
    # 针对第一个字母的多个回路改进  C300-335,350-405,407,268-275,520! p( O. b& h  L2 r  }
    # 问题点 回路没有字母的需要判断一下  x: M* A1 o/ `4 Q
    new_list = []3 R8 X5 `% N0 Q$ n: I5 j
    first_id = list1[0]) N4 ^9 b# n3 a
    if first_id.isdigit():  # 判断回路是不是纯数字组成
1 G+ p5 k3 R+ [4 q4 J1 B% a9 D% y
        first_id_str = '', R2 ^/ L5 [. _4 b# ~/ O- ~
    else:
1 m: \' D- D( P) ^! d6 G- O        first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]% G; w# H) X+ K' n1 r1 u* c7 B8 P
. w0 V/ H5 T9 M. X5 L% ]
    # 添加代替品
  i# W: ?- [( h6 S" {
    pa = ''- Z" V' ]- }0 Y8 V1 ~
    if len(data) >= 4:
! F8 E2 l" V% f# u        pa = data[3]
8 {1 o8 E3 f8 M6 H" ]1 }6 \; T: `. G6 j" v! {" d3 T& F
    for i in list1:
  Y. g! G- R' Y% {+ q  A        if '-' in i:
/ c0 S( Z7 _# G$ Q- Z            print("-或空格的回路开始分解")6 _& w2 Q- }3 n: ^
            item = i.split('-')" k& u/ z6 s5 f' B, U+ c
            item_start = item[0]
" [; I5 |3 }) Y. W            item_end = item[-1]4 E& I9 N. \( K, a# L! o4 K
            item_str = re.findall(r'[a-zA-Z]+', item_start)
; U' k0 b4 G+ {            if item_str:9 N4 c9 P  O% v- {0 S: ^+ R
                item_str = item_str[0]# S5 |! B0 H. o7 o% S5 X* T- I
            else:
$ ?) n1 R* T! R+ N+ |. u                item_str = first_id_str
9 `4 X* T, m9 q. G5 Z( g! N            data_num = re.findall(r"\d+", item_start)& o$ E% M% m# G5 U
            item_start_num = int(data_num[0])
& G& P* O" y  x6 o, l            item_end_num = int(re.findall(r"\d+", item_end)[0])
8 x- C$ I/ j0 |8 N: e  l# X" p2 |5 I$ D2 A- z3 j6 l; N
            for a in range(item_start_num, item_end_num + 1):- B! Z4 D/ f  M5 f5 u  l; \2 k
                c = item_str + str(a)9 a* u, C# k7 F/ N5 {
# m* D8 M' T; G/ r6 k8 c- S
                new_list.append([data[0], data[1], c, pa])
& n: N2 Q3 e! }% O  B            # print(item_str,item_start_num,item_end_num)
9 u1 z6 T6 |' S+ E1 p0 q' m
        else:% e. `0 Z  W6 _- K
            if i.isdigit():
8 `* C5 F6 a, S7 j# D                c = first_id_str + i/ y2 N/ T0 O& |& o9 N* j
                new_list.append([data[0], data[1], c, pa])  y( f' L; Q$ [; _* P3 l7 F* g
            else:! `. z1 C, R& L9 M6 R
                new_list.append([data[0], data[1], i, pa])
( o) i- E1 Y) x. ]( h    print(new_list)# c# Y$ g- ~4 y6 E1 X
    return new_list( c& b$ C( m9 [4 C5 C& y
. L8 h& ]/ R" K; V1 c$ k- j& U

5 Q5 ~) y6 H7 `6 @  v- Vdef parse_data():0 s7 I$ ?/ c1 |/ M
    for name in file_names:
' m9 T4 A( _; W4 B- d& c1 q+ F        print(name)
. h9 @! T/ h7 ~( _8 c, J$ f        if '.xls' in name:; y2 a, d/ I. }3 t
            wb = load_workbook(data_dir + name)
' D. F# l: G) |* J2 u' z8 K            # print(data_dir+name)
% @9 H( U" N8 N8 j0 g0 S9 X
            sheet = wb.active# ?7 p4 `, f. q6 P  u4 ^2 n3 Q
            sheet_data = []
" P0 H. y8 |) N% A            for rows in sheet:
) r* e2 u' Y0 F, Q4 e" _                row_list = []
. ]6 i9 v9 D  S& c                for cell in rows:
( s" H) l3 C5 V, Q; m. n( I" i- k                    row_list.append(cell.value)
" M6 U7 _+ D, f: X1 y                sheet_data.append(row_list)
# l8 f* f, D( j8 O( C0 [& T            # print(sheet_data)
9 ?3 P7 V7 D/ R
: c0 W- O& v( C# c" s( B
            new_sheet_data = []5 t3 S# M, }  W9 D  }
            for items in sheet_data:
3 Z" ~( l4 d0 x% d                if items[2] == None:4 U2 y. y; N; }- ~  Y3 c
                    continue, `' |* A1 A9 g
                data = items[2]" _  Y. \) O  G. [* O' x
                if ',' in data or '-' in data or " " in data:# l, d+ e% {0 J' g$ C6 [0 ]# ~
                    new_list = parse(items): a% {4 v1 m: t" G: G# s
                    for parse_list in new_list:
0 X" L4 Y$ G* M. Q. S! L2 h/ }                        new_sheet_data.append(parse_list)
0 _. V- ~6 d' K5 ?6 \& c: m                    # print(new_list). r% E; m7 o. W, y; V# Z0 h2 o2 M

9 l! P# d' ~$ }* @  k. |
                else:$ b* P5 x/ M  L: v$ E9 Q! W0 [# n9 [7 E
                    new_sheet_data.append(items)0 w$ W$ O+ ]1 }
            # print(new_sheet_data)' c4 s' {/ N4 W- X8 T+ c
            sheet2 = wb.create_sheet("new_sheet")
9 t) ^0 c# J! c3 X) F9 N1 s            print("创建新的sheet完成,sheet名:new_sheet")( [0 C4 `" R$ A) ?: m
            for d in new_sheet_data:# y3 J  U+ {/ I* f- m( R& j/ f
                if isinstance(d, list):; T4 v% O0 H2 @; O$ S
                    sheet2.append(d)
0 B- ~# y; }  U                else:2 a( q8 q- H* K0 z4 }* k% ]# k
                    print(d, "格式不对-->", type(d))
6 @) U2 A2 U5 K+ j/ R: z            wb.save(data_dir + name)
- x. c0 [+ ]7 d( K# h            wb.close(). `+ _) @! [* \/ h( [, _9 r
            print("分解完成")* O3 G' ?5 v$ N/ f6 k( E; s7 f1 @
; E$ Q/ t8 z4 @- U* |7 ^' u
, H5 b7 Q% x, C5 `; Q! P
if __name__ == '__main__':) H& m6 d6 T. l7 s
    parse_data()8 H$ t# Q, [9 ?/ |
( @. r7 `) {9 o1 Y

/ v0 E% w) n5 w6 \, Z( m0 }* t  [2 Z

8 t  Y$ T" P+ m- o  }& |! i- D侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
% b7 Y7 G' i! P& {) [# m$ V: |2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
, o9 l5 {8 A* e# ]; \! @  j3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责! l" B1 v1 I0 }) @/ B
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意: I/ M' u- z  I! i' e" I3 e5 V5 `
如有侵权联系邮箱:ruikelink@gmai.com
: n9 H% m. e7 T0 e3 l6 U4 r资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见
- U5 T7 h  q6 T* Z
8 ?. B4 R7 S1 ~+ T% _4 t- ~. R

: U2 ]; ^) x( V* z本资源由Java自学网收集整理【www.javazx.com】
回复

使用道具 举报

该用户从未签到

6

主题

158

帖子

312

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4526

帖子

9055

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4422

帖子

8846

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4473

帖子

8948

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4446

帖子

8892

积分

普通会员

Rank: 2

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

使用道具 举报

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

    [LV.2]登堂入室

    0

    主题

    4439

    帖子

    8944

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4417

    帖子

    8836

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4586

    帖子

    9174

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4560

    帖子

    9120

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-19 06:47 , Processed in 0.114726 second(s), 25 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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