Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10294|回复: 33

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

[复制链接]

该用户从未签到

4

主题

172

帖子

336

积分

普通会员

Rank: 2

积分
336
发表于 2024-7-27 19:24:03 | 显示全部楼层 |阅读模式
解决问题点5 A' e2 v0 g+ T9 @
拿到一个产品的BOM,有许多位号对应的原材料品番。
: Y* I/ ^3 \0 H, M- Q" i! e) q. q. Q1 b5 r
买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。+ H# [7 {1 B$ n1 k- |$ }: h1 m

% a  U  o* v6 _% v  H处理之前# {! E9 r' m# n# B8 x2 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-321
4 h) n( Z$ n- C5 H! y$ v5 J/ ?, ~/ Z; V# T+ j( a0 @. r5 T- K/ F
处理之后+ M* V( l# Z5 A+ k+ k8 o
[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
3 e7 s& [$ n' B5 Q: L如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。
: [: o* B0 C0 s  Z! ]1 a$ g测试运行环境:
& `1 B' p7 v4 d/ [8 ^* {/ s- Rpython版本 :python 3.7
$ c! D9 D5 V% ]7 z' zIDE:Pycharm2022.1.1
0 |7 i/ `! \; f; P5 s# |$ e, s模块使用:os,re,openpyxl,tkinter
- I& ]" s1 w/ V
: J: Z# N9 B# m7 p$ V) |$ _4 P源码:初次发表,源码如下:9 t* n# Z# J8 Z, O' _* ?3 V* m
# -*- coding:utf-8 -*-
, n! t+ s- c! ]5 Y. R$ U
"""6 b% v# {" N- j0 ^4 B
# @File : excel数据拆分.py
) }9 q& G; O  m$ o
# @Author:chen. A( q' C* Q% G0 b
# @Date : 2024/1/5
2 q( r3 p9 H2 {7 ]% g, v
# @Desc :
' I: f# x- t1 W$ U% x& |! t
"""2 ?+ m: Y* k( \% ?
import re
# g: i1 n$ @; wimport os' Y9 b( D% L2 m. B
from tkinter import filedialog2 }; |1 x1 b" L' j: I9 j) ^0 {+ _! S4 D
from openpyxl import load_workbook
$ q2 x5 _7 r& o* }1 F$ d
+ e* k9 z; y1 ~1 h- F' S# 定义文件夹路径( o* U7 y( ]" q# I, b
# folder_path = os.path.dirname(os.path.abspath(__file__))
0 C: |# G7 _+ x; Z2 x6 u7 t
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
5 ^. E& h6 R& f. t4 q7 {
* `- ~$ R2 P; W4 h
# 列出文件夹中的所有文件和文件夹# y5 W2 M9 ~+ X: T
files = os.listdir(data_dir)
$ q+ _$ u( f. ]% Q- m9 h% `& I9 u+ h9 o8 o% T2 `/ M
# 遍历文件列表,筛选出文件名
+ g4 q3 b. S* |. R0 J; ~, K, Y7 _
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
5 q7 M1 s9 b. v& L8 ^print("需要处理的文件名:", file_names)7 t9 Y4 Q+ T- A2 S# w0 M
2 U# P( C" x6 f1 ?' d+ U/ m0 z. L
' M0 n9 O7 m$ q1 W$ Y
def parse(data):2 a! {5 i4 X( P
    list1 = []- i- D6 |7 h/ ^# k7 r" D0 z9 ?
    if ',' in data[2]:6 B) L5 a: E! X, s
        list2 = data[2].split(',')5 b8 R8 V' w5 I
        # print(list2)
1 O/ l8 h4 y# F9 u8 U- X' e1 a
        # print("*"*90)
, t/ {6 o) ~/ ]; v+ U* F% g
        list1 = [i for i in list2 if i is not '']( |& k" o2 k5 E' w7 U2 `
        # print(list1)
" u) c/ U9 E, k5 n3 b# q0 |% t
    elif ' ' in data[2]:& j6 V; R& S5 B1 @
        list2 = data[2].split(' ')
/ m3 D4 P, O3 C- k% x        # print(list2)9 @! [! G5 E0 B% e9 G) Y3 ?# Q; N
        # print("*"*90)
9 J( z3 ]+ W; n2 s" F! S( b
        list1 = [i for i in list2 if i is not '']5 n% l. \! F6 F( W# [
    else:
3 L2 u( {% ?  C- P$ [  I        list1 = [data[2]]
/ z$ U- @8 B$ J  s3 j( L        # print(list1)
/ r3 E# E4 z1 @; }1 y
4 H/ W. @. l% P& n6 e8 x- |' P& Y$ f
    # 针对第一个字母的多个回路改进  C300-335,350-405,407,268-275,520
) ]- d# B, r4 k# \
    # 问题点 回路没有字母的需要判断一下
' `( P  X: l/ P% f
    new_list = []
$ \: i8 ?- v3 x+ D2 s7 P    first_id = list1[0]0 A* a9 \" e8 f* Q. P$ _
    if first_id.isdigit():  # 判断回路是不是纯数字组成; n2 X8 v: I9 i4 D2 I, U; B
        first_id_str = ''% Z0 R/ G' r7 R' {/ B$ y3 m
    else:
7 p0 |1 t- W$ k* N# t5 y- V0 M+ S        first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]
. x% M- Q5 K; C
' P. [4 {: R& v+ U1 q' ^    # 添加代替品9 o& ]1 Z9 z, Z8 z- a. S
    pa = ''
* S7 ^* H1 q8 S$ v
    if len(data) >= 4:
& X7 Y1 w% F7 [- M7 D  E        pa = data[3]
! `: U) K" t2 F+ a% f$ b! Q% p
2 `$ ]% x: D' \    for i in list1:6 D3 I3 V* b4 H3 s0 ?, @6 @
        if '-' in i:
) u  {+ J) n$ [1 ^/ n            print("-或空格的回路开始分解")8 G5 b4 q+ a) @' ]/ g. l
            item = i.split('-')3 y6 ]/ w6 \" f' r" {/ N
            item_start = item[0]0 o* i; x$ z6 [- R/ w2 ?. l
            item_end = item[-1]8 L$ R# U' [1 @6 S5 ]
            item_str = re.findall(r'[a-zA-Z]+', item_start). O0 H. g! |6 D7 b- f" K" K  Y
            if item_str:- V" H% q( L, n1 X) `
                item_str = item_str[0]9 X0 `1 ?' Z( _! u
            else:
) A- ~' q0 P% i! ?1 a9 W: m3 A' l                item_str = first_id_str5 H! L1 m) ~  }4 u4 R6 H" a
            data_num = re.findall(r"\d+", item_start). v0 D6 z% F2 L- J. \0 E
            item_start_num = int(data_num[0])
5 [4 c; r" Q2 @0 ^            item_end_num = int(re.findall(r"\d+", item_end)[0])
9 W  g3 {8 E! T2 {3 B  Z* E" w6 M9 K
            for a in range(item_start_num, item_end_num + 1):. h6 a) Z1 @' S; b
                c = item_str + str(a); F# z, Y" i0 q( F( M
# T+ q: A. y  R7 B7 D  H9 E
                new_list.append([data[0], data[1], c, pa])
, F: e$ g0 L* c! ~$ B/ ^* ?            # print(item_str,item_start_num,item_end_num)
) ~6 f9 y/ z/ |  a0 |1 x( |
        else:
$ m' f5 b0 O' K2 d0 C1 n& G! l2 p            if i.isdigit():8 r2 @( g9 F; u+ `! t2 e" i- O
                c = first_id_str + i
2 I- U2 k* C. R. K. I                new_list.append([data[0], data[1], c, pa])
1 I( b1 z+ s- k- m6 F, Q9 w7 d            else:# N: G; l; B# n; ]
                new_list.append([data[0], data[1], i, pa])) x/ l8 p1 a* R' g$ z
    print(new_list)% C" _) Y  P4 Q- s& d
    return new_list2 @! R+ h# B) y* T4 ]4 y

7 u2 h8 K! `# B1 O$ w# T1 A; M" W3 J
def parse_data():  s* I* t9 E5 {0 z4 Y3 m1 K! S
    for name in file_names:
  |6 ~  N: U: \2 c. V7 e6 y1 j( i        print(name)
3 p4 u! @8 Z6 V3 Y& W! c        if '.xls' in name:8 c% R& g% T4 ]
            wb = load_workbook(data_dir + name)
* j- q9 a; l! R! [            # print(data_dir+name)
/ K' ~, Y2 _# z$ o5 `0 h2 r0 Y
            sheet = wb.active/ a; z) y: q- r, @
            sheet_data = []
, v& \. a0 f5 S1 A            for rows in sheet:
' e* l7 w  l$ w1 q% S                row_list = []
* C5 \5 z; o: T3 n" d                for cell in rows:
9 q6 b0 ^7 q( ^3 w                    row_list.append(cell.value)4 p' x, A, a0 y) e" s: w4 |+ a. e# |
                sheet_data.append(row_list): m! f' t+ D7 q4 j3 z  t. |  i
            # print(sheet_data)
- S- U* W( ^3 m9 T
3 T- H, T5 E1 \, j" C* S
            new_sheet_data = []! H; e2 Q7 r, Z5 C' ~
            for items in sheet_data:
/ T# e( t0 R+ j3 e+ L/ E                if items[2] == None:! r. O$ P; {% @& M
                    continue
* g9 e1 ~1 S5 s' R7 r  H) }2 u
                data = items[2]
( }* C8 w' K7 s, G* q; G/ H  _# d                if ',' in data or '-' in data or " " in data:
0 l6 ]( A4 _! t                    new_list = parse(items)
& D4 u( Q3 r/ n$ O3 m& G! j. g                    for parse_list in new_list:
( }% c7 N5 k0 W; s/ ]/ K                        new_sheet_data.append(parse_list)! S, E9 E- t* l. x( _2 [( o/ Y
                    # print(new_list)
6 n/ _# @7 d; `, P- a3 Z% r

/ R  W8 p) n5 I8 m% w; {
                else:7 D! N' Z) l" q, W. }1 V
                    new_sheet_data.append(items)
' g: w/ p" E9 i' E/ e0 u            # print(new_sheet_data)$ W' C3 i" g, [# O4 R. ]
            sheet2 = wb.create_sheet("new_sheet")5 ^7 c: x$ @1 q9 T* N
            print("创建新的sheet完成,sheet名:new_sheet")$ l; j+ ]5 N; X1 T
            for d in new_sheet_data:( X, x( y* H0 _* y1 o* p# n
                if isinstance(d, list):3 f( q; v* i0 b; X! i5 g3 V- W
                    sheet2.append(d)
/ w7 N. |' u/ U                else:+ G2 _9 L: B3 K* E) w
                    print(d, "格式不对-->", type(d))/ A( J* Y! \, _' Y
            wb.save(data_dir + name)/ Y% u- i+ H9 e
            wb.close()% U7 @- E8 A3 G7 F% l8 J# S" Z" X
            print("分解完成")
1 r4 d7 T& f' G4 h" m1 |
; b& ?$ A2 e2 H. K  N5 W
! V8 b. P9 @$ _# zif __name__ == '__main__':5 {5 G* c& _8 c1 z! L' h
    parse_data(). l9 a% O" [6 G; }1 ^% W% c) p+ o

, G6 D. X! k8 `( o9 M
2 U" [; w& E% N. o3 S5 d9 G% D8 F# c$ J

0 p5 i9 f5 ?- V6 ~1 E侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
) D* q4 K2 o) ?4 F8 X$ A2 Y4 k2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除! g1 T+ s! `1 v9 H+ z- t
3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
+ S) b+ \+ w' s6 k# K; U% t* @3 S4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
! y; V% n) t# V: s: u) E如有侵权联系邮箱:ruikelink@gmai.com8 F# C4 E) n7 `! t* c8 @
资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见8 c0 m- g( n; o& p# J) J& J3 A* a
" l% _' r# U1 w" [' v
. s: |0 a0 W  H3 ]1 G6 w" u
2 R4 H2 p( a( p) J1 _$ x; I
本资源由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

    主题

    4585

    帖子

    9172

    积分

    普通会员

    Rank: 2

    积分
    9172
    发表于 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:17 , Processed in 0.163981 second(s), 25 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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