Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10672|回复: 38

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

[复制链接]

该用户从未签到

4

主题

178

帖子

336

积分

普通会员

Rank: 2

积分
336
发表于 2024-7-27 19:24:03 | 显示全部楼层 |阅读模式
解决问题点
# p& y- H; L+ j& a0 {4 j! t拿到一个产品的BOM,有许多位号对应的原材料品番。
, Q1 e. {, u( ~3 z4 G* F  |
3 J4 b! s2 V: W$ w( t买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
, {( c- {- T( |" N7 Q6 _
+ h0 L0 r' s* W3 \, ^+ q处理之前
: b5 C3 B2 c$ X1 F: Q- Z5 t[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
8 W; q3 t3 v, E5 u2 P, |
0 N3 }# ?+ Z. J( A. g6 R处理之后$ Q4 O  }- G7 G" {# w. m" }
[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
8 v+ f: Z6 [! `4 }9 b# d- }2 E如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。
) w9 |1 j! R7 k, b. Z测试运行环境:/ [/ q. `( v1 v$ U& I
python版本 :python 3.78 S! K) B; g' J
IDE:Pycharm2022.1.1
  g- i7 t8 d9 Y9 I模块使用:os,re,openpyxl,tkinter, I$ x- G; G( L+ J5 W7 c

, h5 {7 Y  m2 T- q3 a) i源码:初次发表,源码如下:
9 R2 F: W0 F( \2 {# -*- coding:utf-8 -*-$ J4 U3 E1 Z6 i- y& E9 a- F
"""
" y1 w# J/ I5 E) C6 I6 _( f* Q- \
# @File : excel数据拆分.py  G+ A" D; v/ m6 _
# @Author:chen
) D" R  d) M! Q9 k6 t5 V
# @Date : 2024/1/5  C1 c. C  R0 z: B: K- p) L
# @Desc :4 ]4 a3 t1 g9 k7 K
"""5 y* _8 [! G, W4 \
import re
9 o7 @0 M! v* z1 {$ Jimport os- G. g+ P3 U4 t: ]8 r- G! o3 g
from tkinter import filedialog6 L" [! O- E" ?" k9 X3 ~2 ?
from openpyxl import load_workbook/ U* Z: C/ l# E3 x( y
0 c8 f& F* Y3 K
# 定义文件夹路径
2 u, P& u9 m; P& l
# folder_path = os.path.dirname(os.path.abspath(__file__)), T0 ~7 _5 q) ]! c; z: D, q
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
* K% e( S( |2 I" V1 E% j- |* d6 V) L
8 g, O3 o- _: a6 V" n: C6 |6 g6 ]
# 列出文件夹中的所有文件和文件夹& H* h5 d6 o. B! Q+ M- c
files = os.listdir(data_dir); V2 l" U( N0 N- s/ @4 i+ F
' w, @3 C  I, a& z  F1 {+ j6 Q+ ~/ R7 x
# 遍历文件列表,筛选出文件名
5 D0 ]' o! o9 @+ [$ @$ i/ o
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
2 a% N* `+ Z6 S- U5 Q& |/ D1 Yprint("需要处理的文件名:", file_names)+ _7 Z7 V( R( L1 X; ?

0 E! n$ g8 m5 l( f7 V, y# T- ]8 y
def parse(data):
! w9 s6 F2 M! A3 n2 y  P    list1 = []
" p6 C0 n; m5 {$ e    if ',' in data[2]:
0 h1 v' R  j, l3 i6 L3 F        list2 = data[2].split(',')( Z, C! N1 y! s/ S% R9 r
        # print(list2)
7 A3 V2 ^2 p- Y, Q
        # print("*"*90)9 m, ]  x1 D$ o# q% V: V) l
        list1 = [i for i in list2 if i is not '']& y3 Z9 M; H! }! z8 c1 _
        # print(list1)0 Y4 U/ n5 l4 N& {8 w% E
    elif ' ' in data[2]:4 F7 c6 K( M2 s4 {  S. r5 M2 r2 ^
        list2 = data[2].split(' ')$ a4 r  e. s% `9 p& D* z' x
        # print(list2)# F+ n; C: O7 s$ e$ Q0 a
        # print("*"*90)
% z! ]# ^; S" ]
        list1 = [i for i in list2 if i is not '']
- i* W$ A0 w1 D- q  J    else:9 ?' s2 k2 G; a; G8 M' K4 H
        list1 = [data[2]]8 q2 A  {: a, M' m3 m9 \
        # print(list1)
* S) R$ k6 W" v: O9 H9 `1 ^

2 |+ s& P% t9 [9 y& I9 ~* A% u
    # 针对第一个字母的多个回路改进  C300-335,350-405,407,268-275,520
; L$ @5 ]2 t+ @! m3 e# p* U7 I$ R
    # 问题点 回路没有字母的需要判断一下
- w7 g7 @. [- B; _! x
    new_list = []
& j8 Z! a- C; t    first_id = list1[0]
$ F) K* X$ A; |! z, c% v" Y    if first_id.isdigit():  # 判断回路是不是纯数字组成
9 y: @, S. X" c% K
        first_id_str = ''
. N3 o, u8 G0 ~. j  ?
    else:% m, M5 B0 F6 n$ e  W7 H8 m/ x
        first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]7 s, Q- K8 ~$ R, z2 G

" M# N2 c+ y/ z0 ], \& y: k+ q    # 添加代替品3 P" X8 m5 W& ?% w8 x
    pa = ''" x, w5 b/ I$ l, a7 M
    if len(data) >= 4:
4 n* j1 l8 w. E7 h3 u* k        pa = data[3]
6 |; b4 G" a6 L6 c( p: i3 E  M& [1 Z' Y; m6 Y1 {
    for i in list1:
) k) h1 B. V0 [, ~2 N7 O) y9 K' k        if '-' in i:
; C6 R+ ^9 |- Y! P- H4 q. s            print("-或空格的回路开始分解")7 A8 E" t; `* d- H$ I* Z0 a1 q: R/ I
            item = i.split('-')% [3 |: ~& R' D9 ~
            item_start = item[0]
0 U8 r' S" G4 U5 a) W4 A            item_end = item[-1]
" N/ m1 M5 f. b2 U% w            item_str = re.findall(r'[a-zA-Z]+', item_start)
  x+ f; c: S# m' x" I* w2 H' @            if item_str:7 x% C) h2 G; H1 K" i
                item_str = item_str[0], M6 [8 B- r; J* V$ n: @7 r+ E4 k. J
            else:
5 z& h( k2 J( X+ q: x                item_str = first_id_str
  b: n6 T' l" O' J" a8 a" d3 S            data_num = re.findall(r"\d+", item_start)
9 ]' d" c$ y. A* D8 V) j            item_start_num = int(data_num[0])
5 g3 i: V" R( W" R            item_end_num = int(re.findall(r"\d+", item_end)[0])
$ U# z5 O3 ~3 \
. Q$ ?. p$ X$ s  u( S            for a in range(item_start_num, item_end_num + 1):6 r1 |* O* b8 u5 e0 W; _+ m; X
                c = item_str + str(a): L* O/ D& [9 {/ O/ I9 X( Q& t
9 C7 u5 d0 C6 F6 F
                new_list.append([data[0], data[1], c, pa])
" G& E, l" d4 A6 ]            # print(item_str,item_start_num,item_end_num)
4 P0 `, \" p) o% K0 M9 F0 K
        else:
0 q2 l. l3 y! M/ H3 @# [- q, \            if i.isdigit():
1 `4 ?7 |- t. ]: w' w# N                c = first_id_str + i  ]; t  H+ j, [* L
                new_list.append([data[0], data[1], c, pa])0 }" ^% A  e- i/ A  k9 W5 u
            else:$ S: i1 n* P, d8 X! [0 e9 P  y
                new_list.append([data[0], data[1], i, pa])! Q( Z' X, |4 h) R/ w3 E! t
    print(new_list)0 ^: z5 D7 Y' m/ P1 O* a1 C
    return new_list7 [. i' }9 A& I2 P' `
0 f0 l' `3 Z1 ^4 ^" j9 u2 i

1 E1 d  N' o; }def parse_data():+ U( d; l$ a, d% ?2 B3 |
    for name in file_names:3 P2 {; i4 ^  D0 }( _( T0 D; ~
        print(name)" p5 p$ Q' h1 Q6 Y3 c
        if '.xls' in name:% Q$ \. Q2 \1 K9 Y- d8 m
            wb = load_workbook(data_dir + name)
& m4 |, @4 {% U/ a6 F9 v            # print(data_dir+name)
4 V  o. A* h7 Y$ W
            sheet = wb.active! y. c8 V0 M+ [0 t$ ^
            sheet_data = []
- Q/ {* Y! v: M6 m            for rows in sheet:: R# b* W. m; K. B
                row_list = []
- y" g, i/ v9 a- G' Q% K                for cell in rows:$ q0 A( m0 q6 u$ V
                    row_list.append(cell.value)% u; p* j; n# L4 n9 k6 j/ N# S
                sheet_data.append(row_list)+ Y* U; b: d6 C5 S
            # print(sheet_data). a2 C: f7 G" i, B% K" Y5 K
! T* |7 M2 O( Y% @
            new_sheet_data = []
4 ~  h" _4 m& d% m0 t            for items in sheet_data:$ n- c5 y6 H, m  ^
                if items[2] == None:
9 m( S8 T* `) A3 d                    continue
7 q  O4 r' |  h! T6 {
                data = items[2]
7 n" |0 P( {" a" f                if ',' in data or '-' in data or " " in data:# c' N3 W; v( e& s, v$ c. z! r
                    new_list = parse(items)) L7 f+ a: k7 C1 S  U
                    for parse_list in new_list:% {  N0 h+ V; m2 u# b$ U! F( k
                        new_sheet_data.append(parse_list)4 q: g8 g0 ~! u3 `% M9 m
                    # print(new_list)
2 J! d( z) D1 w! X9 S
- P9 q3 R& f% Z1 G3 K9 ]- p' F4 B- l
                else:# B( r8 B; j$ O& P
                    new_sheet_data.append(items)2 r  _7 V# H3 I9 e9 r, B9 m# o
            # print(new_sheet_data)
* K- b6 G$ g5 M# v2 G0 i$ {+ g* R
            sheet2 = wb.create_sheet("new_sheet")' l! i& ^1 W( W0 i  B. d* l
            print("创建新的sheet完成,sheet名:new_sheet")
1 k2 a4 p) |3 t( t+ `            for d in new_sheet_data:( z( n- l+ q( @9 f% l
                if isinstance(d, list):
* p6 v/ a) _+ m" ]' z- @                    sheet2.append(d)
$ a1 R! z- C. w6 [" b  e                else:
# [" @$ _& g: ]5 u' P' [8 V& |# I                    print(d, "格式不对-->", type(d))
1 J3 j9 P& V4 m* x/ S6 i- h6 D/ A8 X$ n            wb.save(data_dir + name)
1 d  @& l8 g- Q5 @( C3 p            wb.close()# V; O1 }8 [2 |% z! ]& U9 R  i
            print("分解完成")( o' k; I7 J9 V" N6 o

: I# v# V6 X" V5 ?& J
! u! `: m( A1 F9 i8 s5 H$ ^if __name__ == '__main__':
4 r9 I5 D9 z" Q4 J    parse_data()1 D0 M2 r* L; C% o+ @& z' Q

9 }8 T5 z8 B3 a/ i; ?' W! w$ c! r% G4 k! d- v  c; e
# v. g: H& C: _0 p
# ^. n3 D9 q0 n' ~
侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关- `+ a5 k9 h5 T+ V
2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
3 }& C9 }" X" K* {# ]2 R5 K0 S3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责$ H8 ?9 I+ {' c/ q+ E8 U" S: T4 D
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
( }' M' i. G4 r如有侵权联系邮箱:ruikelink@gmai.com
$ V9 v" \7 i0 ~2 q: J; Q6 x4 M资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见
2 |+ f, J: {" T0 y1 S0 k3 s# X$ O+ A! \1 y& L
. T$ r" I: z/ k& I

% `$ J! D: s; N4 R; x! M4 P本资源由Java自学网收集整理【www.javazx.com】
回复

使用道具 举报

该用户从未签到

7

主题

162

帖子

331

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4685

帖子

9373

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4561

帖子

9124

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4630

帖子

9262

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4580

帖子

9160

积分

普通会员

Rank: 2

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

使用道具 举报

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

    [LV.2]登堂入室

    0

    主题

    4585

    帖子

    9236

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4589

    帖子

    9180

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4737

    帖子

    9476

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4698

    帖子

    9396

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-3-27 00:00 , Processed in 0.229131 second(s), 25 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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