Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9196|回复: 10

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

[复制链接]

该用户从未签到

2

主题

150

帖子

278

积分

普通会员

Rank: 2

积分
278
发表于 2024-7-27 19:24:03 | 显示全部楼层 |阅读模式
解决问题点
: W5 b) f3 c* O) z/ k: j拿到一个产品的BOM,有许多位号对应的原材料品番。
) J1 V3 ?' J4 b
1 D1 k3 K, i" D: n0 P  k买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。
5 q. p+ k7 D( L$ P$ g  x) x: t) _
& W7 V7 }. p/ x2 X+ }: H6 h  a1 }8 Z5 `处理之前: b6 t2 o2 M4 t3 J0 Z: U! k
[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$ V2 |2 Q) G9 g- w9 Q, s4 I  x2 `
7 |0 I3 Q  C* F% t2 b& v- E) ~
处理之后0 @) Q; U6 F" [6 x/ ]' n
[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]C3211 U6 |6 d7 Z" U5 [' j
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。+ ^5 I8 d& E% M4 F) r/ m
测试运行环境:3 ^3 A) d. x. r3 D9 S% v5 z
python版本 :python 3.7$ P5 D; |/ F9 {
IDE:Pycharm2022.1.1
4 H" Z4 a: n  q3 @% W3 e- F模块使用:os,re,openpyxl,tkinter# i9 p% U" ?1 m! S
" [( E, B/ V2 P' \0 P  B
源码:初次发表,源码如下:- r; W: R; u; i( v) \$ \/ C$ f+ v
# -*- coding:utf-8 -*-+ o! ^0 j% t: V* ~. P; C  l
"""
' X, A% B: Z, ^2 G  f( g' G
# @File : excel数据拆分.py1 k# g, E% y9 a) C! r
# @Author:chen5 b( e! `: W. h* p3 U' g) ~
# @Date : 2024/1/5
) N) e9 |( A  d
# @Desc :
3 Q; {( \' Y4 b  C3 J
"""3 J$ Y& e6 [1 m- g2 G; z7 y# A
import re' R! F$ Z0 c% Y/ H$ p) w6 t
import os$ K# Y; s+ |6 D& k0 m
from tkinter import filedialog
! M* w9 |4 ~" a: J$ Z$ afrom openpyxl import load_workbook
& E# J1 h9 d7 Y* ~, V- o* k* K$ h  x) [& h2 F1 D+ ]% @
# 定义文件夹路径
1 }# d8 O$ G! i
# folder_path = os.path.dirname(os.path.abspath(__file__))/ N1 E* F6 S7 G4 i& n9 n0 C
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'* l5 D: L; q; i' ^9 p' U
" s" ~3 I1 m/ }  F" l
# 列出文件夹中的所有文件和文件夹
( O" d6 H' L6 d
files = os.listdir(data_dir)
" w! l# h* C% y8 u0 f6 t; k! f4 {
' m6 i  G8 J/ r" `% T2 c/ X' _# 遍历文件列表,筛选出文件名* g8 E" A! W' m4 h2 l1 u! O/ b5 H
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]0 s' k/ }8 ]! H7 w2 z4 @8 C( h
print("需要处理的文件名:", file_names)
& U- C# u/ |2 z/ V  a/ T! j  A
* J" ]: F, \; e! d( L% @& b
# z+ ~- A7 s$ q! O1 N3 |% rdef parse(data):' E* f2 T$ I; v8 @
    list1 = []
- [5 ?) m* ^4 }' Q# X  f, D    if ',' in data[2]:$ b1 x( H: z7 M9 v7 F: t7 \
        list2 = data[2].split(',')
3 D- g' o  z% w: l" \+ [" t        # print(list2)
- O3 I8 x$ y4 U6 I
        # print("*"*90)& D' f7 c1 R' J" E7 q, ]# O3 Z
        list1 = [i for i in list2 if i is not '']( Q( z- S1 O$ R; B( _
        # print(list1)' T% l' m* |. @" M( b& i# s( X
    elif ' ' in data[2]:9 e0 q7 a5 s, d
        list2 = data[2].split(' ')1 v6 {  e8 x5 w' M
        # print(list2)
, S! S$ g* o" [3 f; \/ M
        # print("*"*90)4 Y$ _. d3 s! |! ?) [- Y9 I* Z
        list1 = [i for i in list2 if i is not '']4 I7 n6 V( B4 {# c& r
    else:3 ~  v$ ]+ e+ Y- \
        list1 = [data[2]]$ o. Q' D& n% h0 @/ U
        # print(list1)
! R8 P  g6 z* U* l- I9 s
: ~/ f3 ?2 L/ ?
    # 针对第一个字母的多个回路改进  C300-335,350-405,407,268-275,5208 `+ z! \, j# S
    # 问题点 回路没有字母的需要判断一下3 ^- O" T- h* r0 P
    new_list = []
- N5 `% T& X1 C8 K; ^+ Z  O    first_id = list1[0]* z) s  a0 s9 ]) L4 A
    if first_id.isdigit():  # 判断回路是不是纯数字组成6 n, B% K( I6 Q3 Q2 v. g- `7 b
        first_id_str = ''
+ R: Q* y9 M# {% g& F2 c$ p) b
    else:
; ~/ V3 h. P  ]1 G        first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]7 l, S" Z0 _. B7 J1 a

2 s: S; v* N8 Q9 c! X: `* p    # 添加代替品" v5 K, o7 L* N/ C
    pa = ''
$ x. M! E4 a5 X0 ?
    if len(data) >= 4:. c, T% E8 u9 E# r8 C
        pa = data[3]
% Q8 }, X( m: W8 T0 U6 j: U$ `/ s) D1 F! z9 P- t, }5 \4 Y
    for i in list1:0 s  F0 X+ W8 Q( R+ f: u+ H0 e' s7 t
        if '-' in i:/ s4 c  l+ u+ K% f, W% A1 c
            print("-或空格的回路开始分解")% \2 w" b( G8 p: ]
            item = i.split('-')
8 _" ^5 a* G4 T. l. m& U* u$ j( z/ x            item_start = item[0]# A% O2 x! f5 l3 j! b
            item_end = item[-1]
3 `8 u8 S1 K# u- K            item_str = re.findall(r'[a-zA-Z]+', item_start)
" B4 M/ T7 Q4 E! V& A            if item_str:
8 M0 k1 u5 W+ P. s/ N9 U" O" g                item_str = item_str[0]* p( X; W0 C% E% d) n
            else:; t* u' a: m3 ^1 N6 I
                item_str = first_id_str
9 k3 d* \$ ~0 A- _- [" @            data_num = re.findall(r"\d+", item_start)
  A# N5 l; X0 u$ i  Y            item_start_num = int(data_num[0])/ r0 j7 f6 p- G/ E& T/ x
            item_end_num = int(re.findall(r"\d+", item_end)[0])
3 d1 u. U, ^0 b
: y' N+ H3 L, D* E. [0 s            for a in range(item_start_num, item_end_num + 1):
+ n- u. A3 A, K3 A7 \                c = item_str + str(a). D, H3 l" b: v# z
/ J: l2 [/ |% J
                new_list.append([data[0], data[1], c, pa])$ m+ \: X) }& E- z
            # print(item_str,item_start_num,item_end_num)
7 R5 G/ H1 s9 ^7 @+ o
        else:
5 E/ o" A/ G5 h5 B3 D# d. ^  x% `& W            if i.isdigit():
5 j3 |- A1 K3 o8 l! Q                c = first_id_str + i" h4 G& z5 g" r& U+ q4 W" v9 P
                new_list.append([data[0], data[1], c, pa])
  R2 E% g; b1 |( Y5 Z" l6 t            else:
! m& }6 y7 _1 O7 |# q( ~8 X                new_list.append([data[0], data[1], i, pa])
* M$ o4 S+ ?5 S+ N& A    print(new_list)
; E  ]" S8 f6 S$ O    return new_list6 c9 N. O3 N$ o6 I$ @6 H

4 \" {; k& ^8 [2 J/ w$ X$ E) O
6 T" |# k. O( D5 {8 Adef parse_data():
0 j6 m4 l6 r/ q6 f    for name in file_names:
5 a8 t7 S$ ~8 Z9 X        print(name)3 ^/ ?$ \/ A  l. ], ]7 h
        if '.xls' in name:4 c# \. G% f/ M  f
            wb = load_workbook(data_dir + name)2 L5 d/ w+ d" [" f+ }( |0 ^9 F
            # print(data_dir+name)
& }. f+ O- b; l2 p$ ?4 B
            sheet = wb.active
" g% g  H7 Q/ J! n2 S; A            sheet_data = [], Q' q  j% m' m; d" C) T0 w- A
            for rows in sheet:
! C3 }, F) h; o- L, E                row_list = []
, l3 ~3 F" g+ b5 ]3 v. s9 U                for cell in rows:* Y& K% k9 v9 d
                    row_list.append(cell.value)
2 Y5 I3 b+ n$ B& k9 [& M                sheet_data.append(row_list)+ B0 \, b! m: {$ {8 J; O
            # print(sheet_data)
( t! u0 j: L7 Z
5 V: h4 _) J* P
            new_sheet_data = []
. ?9 ^: h% D; p5 k8 e7 Z            for items in sheet_data:
: x  _. Z8 K9 E& M                if items[2] == None:7 O  O( O6 N( J. p% T: ?  k8 _
                    continue3 A) s0 I/ A( ?! z# t/ a
                data = items[2]
* n8 d1 Z3 s& C9 y6 U                if ',' in data or '-' in data or " " in data:
* m7 E0 E+ j3 l, Q2 d  O& I0 D                    new_list = parse(items)3 {  K; `9 {; A, Y$ j3 U, L; _
                    for parse_list in new_list:
3 w0 c+ y( e0 g2 T1 q                        new_sheet_data.append(parse_list)
: F. b) S2 n$ y# ^5 v) R0 d" Z                    # print(new_list), J. \* P/ Q4 d0 M

9 u; t  ]% I, W8 F% N4 `$ J
                else:( K& ~) y) o3 A2 z
                    new_sheet_data.append(items)3 Q" G% n* N& H* Z! |* H8 }' O  o8 T
            # print(new_sheet_data)& V9 L3 P2 x4 j" _: W
            sheet2 = wb.create_sheet("new_sheet")7 m( |: w( _/ i9 B2 k
            print("创建新的sheet完成,sheet名:new_sheet")
  d; h  ?8 F# z6 q. r2 W4 C            for d in new_sheet_data:
4 B) ~2 ]! U$ \" L: P( u( d; C                if isinstance(d, list):
+ l( a5 z7 x/ H9 y  T2 o                    sheet2.append(d)3 }; {5 n& ^/ ~3 ?1 w7 @
                else:
! Q$ ]2 O) a7 C, \4 O* m5 q. n                    print(d, "格式不对-->", type(d)); ]8 {2 Q- ^3 _2 E" H1 ~' O5 H
            wb.save(data_dir + name)
& g. _, C6 L, `& H( Q: H0 n            wb.close()3 ^$ r6 B/ e, R$ U7 b7 o: }; c
            print("分解完成"); c. z0 H+ b# i$ U; m
0 E2 Q6 X, z. s7 S3 }- L9 a8 y: b2 \

5 s9 S- j' T5 b- p7 k- s% _" Pif __name__ == '__main__':( Z' z, d% T) T) L8 l
    parse_data()) r2 a9 z9 w. Q
- O$ s0 C  p% [: T/ ^

; V8 {2 F. D' I' q/ O9 Z- A! p" E8 C

6 G! U5 D$ I$ B) x5 i  x- Z# B3 y侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
  ?. T9 W: B) C* c* S3 {2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除. B6 a) T( t# o# X
3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
( ^8 ]5 Y, g$ e& M8 W  P* G, W4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意  H' |7 K. ^( B" u
如有侵权联系邮箱:ruikelink@gmai.com
+ i0 R! k, n* f+ Q4 Z  k$ \  M/ L资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见
2 Z3 |5 {8 u% _9 j  N# l! B/ F7 g* m7 u; h
# }. L& R8 w3 \( R5 l) Q
$ p+ R! y, \) o$ R* b
本资源由Java自学网收集整理【www.javazx.com】
回复

使用道具 举报

该用户从未签到

3

主题

138

帖子

253

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

3911

帖子

7825

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

3827

帖子

7656

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

3892

帖子

7786

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

3834

帖子

7668

积分

普通会员

Rank: 2

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

使用道具 举报

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

    [LV.2]登堂入室

    0

    主题

    3833

    帖子

    7732

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3795

    帖子

    7592

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3994

    帖子

    7990

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3930

    帖子

    7860

    积分

    普通会员

    Rank: 2

    积分
    7860
    发表于 昨天 09:19 | 显示全部楼层
    1111111好资源
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-9-8 12:59 , Processed in 0.126967 second(s), 25 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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