Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10011|回复: 29

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

[复制链接]

该用户从未签到

4

主题

170

帖子

336

积分

普通会员

Rank: 2

积分
336
发表于 2024-7-27 19:24:03 | 显示全部楼层 |阅读模式
解决问题点
7 g0 \( n% N3 E$ w拿到一个产品的BOM,有许多位号对应的原材料品番。5 |( o0 w3 V1 h/ ?) x" e; C
( I; Q" H* m6 N3 h' V# F
买材料的时候需要一个材料对应几个位号,但是生产核对的时候核对的是位号对应的品番,下面实现的好几种位号的BOM,拆分成一个位号对应一个品番,方便核对。/ V3 M, }( W; r
5 K: X. ], S+ s* F3 K* K
处理之前8 p, A1 O4 b9 M: C  m* s% M: Q2 ^
[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
9 z9 Y1 S3 `0 K
2 D! ~9 D1 T. H, [: P; F' m' a处理之后) [; O; b7 S4 E+ X
[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]C3214 u) f& P, [1 u2 \+ l
如果大家觉得使用,可以点赞收藏,不好用也希望提下改善建议。1 \4 G- u7 L1 C
测试运行环境:" g0 \5 n0 ~0 H0 k2 V
python版本 :python 3.7
! O3 u# `/ L' K* BIDE:Pycharm2022.1.1' P3 K  q5 G$ Y3 d9 J' T) v5 H( ]
模块使用:os,re,openpyxl,tkinter
. {2 E% O& n( {/ h: f+ Z
% ~8 a' \3 m% }' W! @源码:初次发表,源码如下:
% u8 w. g7 r: Z0 j# -*- coding:utf-8 -*-
9 B, K; Y9 v; I3 K1 K
"""* p' I3 v, h8 a4 g7 O! d7 l
# @File : excel数据拆分.py
" T7 {, g& g& N" ^
# @Author:chen
3 @+ x" C$ L' ^: B, ~
# @Date : 2024/1/5
. o+ E3 C/ b" |# c8 N/ r# T
# @Desc :5 V' f, ?& v7 h* U$ I0 t5 D; S1 h% S
"""1 B3 _4 ~& j9 g) ?( Y- c
import re
3 i" F6 }$ r7 v: Rimport os
# V" W' r6 H1 s3 Jfrom tkinter import filedialog
9 N( s5 C: [1 s% e4 U+ Jfrom openpyxl import load_workbook
9 S/ F/ [" G" ?% X, R
+ @; U1 o$ d) G0 r# 定义文件夹路径# Q3 N1 L1 @: S' S2 Y; V
# folder_path = os.path.dirname(os.path.abspath(__file__))
1 X$ k5 }5 Z7 u2 r: U
data_dir = filedialog.askdirectory(title='请选择文件夹') + '/'
: S2 O: ?' D5 n3 W
, X  j# K" k& I; o' i9 V, c
# 列出文件夹中的所有文件和文件夹7 x$ b+ q: Y: G8 ?
files = os.listdir(data_dir)7 m* _' V9 ?& K3 R8 s- x, w8 ?% d. t
3 z( d! c. @+ N- q2 k4 _
# 遍历文件列表,筛选出文件名, E( V5 b5 I1 q! F. i! \
file_names = [file for file in files if os.path.isfile(os.path.join(data_dir, file))]
* B* c2 S3 ]6 P& [" ]( y$ I- m8 oprint("需要处理的文件名:", file_names)
* i% K% q: I8 l$ J# f: v- `! u& O5 V3 a) {& R

5 i# _) v9 G/ G# Zdef parse(data):
  n5 R9 E- L4 x    list1 = []
+ l" r. C* P3 r" h: x    if ',' in data[2]:
! K1 g4 \( l0 r9 J1 h- X0 N        list2 = data[2].split(',')( f! i4 B1 R; I2 y. ^7 j4 A
        # print(list2)9 E9 }. V5 ]1 a4 n$ @
        # print("*"*90)
9 w- A  m7 i7 q; W
        list1 = [i for i in list2 if i is not '']
/ Q6 W1 f. {: ~5 q5 |. C        # print(list1)
! A1 i* J. s9 L; ]  F$ R5 g
    elif ' ' in data[2]:
4 C! A) M' S, ?) r2 D7 }4 c        list2 = data[2].split(' ')3 j9 P0 f$ S1 ?" j5 R! f( W; S
        # print(list2)
& ]3 D0 p4 I9 I& ~4 h  C
        # print("*"*90)! ]; N# o( `9 y* u( V$ |/ E
        list1 = [i for i in list2 if i is not '']) @/ H' F5 ~* a% R0 K, ]. U3 P
    else:
! H8 v) @7 t3 M7 E% Y1 J4 d7 W        list1 = [data[2]]
% g* ?! I8 M% c  Y) h% ^        # print(list1)0 K( f, e2 d0 T6 Y0 G3 X
% a; b# o4 p/ o7 [
    # 针对第一个字母的多个回路改进  C300-335,350-405,407,268-275,520
& |4 @  D# o1 W% t4 J% g9 [( r$ ^: m
    # 问题点 回路没有字母的需要判断一下
; h- I3 c, i$ F$ _
    new_list = []; t8 J4 G0 q2 f6 C
    first_id = list1[0]
$ k7 l4 v: _' y2 o8 {8 X    if first_id.isdigit():  # 判断回路是不是纯数字组成) e3 A3 t4 v" f) ]
        first_id_str = '') M1 ?% t: e$ x% p/ I' f
    else:# D- x0 m2 f. `- z6 y5 J3 @, c
        first_id_str = re.findall(r'[a-zA-Z]+', first_id)[0]
% x5 n+ b- M0 ^# q4 \' L
0 N4 t  H8 b( o& q  }% P    # 添加代替品
$ g; ?) D3 O+ |' y" c
    pa = ''% e: c( y8 w4 \; ~, u) e  v
    if len(data) >= 4:9 g$ k1 q" r9 ^
        pa = data[3]" N6 ^8 K" }7 U  G9 A: A! Y

0 Q* o$ j  {  k2 q( ^7 E) T& b    for i in list1:
4 Z1 p6 w% V6 Y1 A0 N$ \) k        if '-' in i:3 X) c1 `5 a/ V( ?/ h
            print("-或空格的回路开始分解")9 b2 O* }% b2 [" Z6 a! O9 U1 L
            item = i.split('-')
' w6 \3 N- b' J9 F& g# x2 P            item_start = item[0]* P! _" A; [4 W+ O% h# S  Y
            item_end = item[-1]; h" I5 {7 v* e( \- R7 ?3 H# q
            item_str = re.findall(r'[a-zA-Z]+', item_start)- R7 ^! `- g3 ]& s
            if item_str:
7 T3 c2 N6 A8 Y7 v  X                item_str = item_str[0]
2 A; j1 Q  Y! R2 K2 Y0 b, p8 @            else:
+ d' E2 \7 v& m8 v3 X& \! X                item_str = first_id_str  B' r# O( X+ c  G  Z! x
            data_num = re.findall(r"\d+", item_start)) e3 [8 U/ A2 u. {4 R$ S
            item_start_num = int(data_num[0])
8 d( |0 ~, R+ S2 `5 C% P            item_end_num = int(re.findall(r"\d+", item_end)[0])2 Z% d% Z( l  p3 O" ~7 D

% r0 x& A! e) O4 z: a8 V            for a in range(item_start_num, item_end_num + 1):5 ^4 G/ K- b" G" k; d7 C: g" `
                c = item_str + str(a)
7 w2 [. G  I: O. [. k) X& A! C
: B, O5 q& B- k: p  h0 `: L* ^                new_list.append([data[0], data[1], c, pa])) Q( b, ^2 s8 S2 U* ^) E- ~
            # print(item_str,item_start_num,item_end_num), j( W7 f% I5 u  N9 \: h5 i
        else:
; U1 Y5 P; U) _            if i.isdigit():, S" R+ i8 w; a1 ~- L& P% Z% x
                c = first_id_str + i: X! F; _7 e. z" }% h3 u7 r" o
                new_list.append([data[0], data[1], c, pa])3 M# M( }* h4 i2 t# _
            else:
7 M% v4 _7 x# b7 I/ K! F2 L# T                new_list.append([data[0], data[1], i, pa]), Q% Z$ Z/ @! k. N/ P
    print(new_list): ?- ~: @; D7 H
    return new_list
' l5 @9 w8 s% b6 V" l( l/ B* z& P, X& m' R+ `6 S" G8 }
* Z( p6 E5 o  V% _/ Y
def parse_data():
4 O- X7 j& E! l+ w- ]7 q    for name in file_names:, M. b, T  |5 r! M5 n$ J6 I, p% x
        print(name)- ^, D3 k2 `6 C# L  [
        if '.xls' in name:' q$ Z& ^! {  E0 y/ T* Y# B/ Z
            wb = load_workbook(data_dir + name)- i. M5 N( x+ d: C" o5 ~! I
            # print(data_dir+name)5 {2 |, x5 e9 T! G8 z4 z$ [
            sheet = wb.active
/ I6 W9 t) z  g1 M            sheet_data = []
0 S7 m. `; ?" N% `% z! Q: D            for rows in sheet:
$ f8 x; o3 p  \# _- g; P                row_list = []4 D4 J; y" k9 C7 W
                for cell in rows:
) G/ f) T! H8 h& v5 g' H                    row_list.append(cell.value)6 L/ W& a+ ]2 f4 |" G. }
                sheet_data.append(row_list)
2 L9 X5 r& E: z5 s            # print(sheet_data)! [+ F& T/ W; L8 b. `

2 C  |, s% F" t
            new_sheet_data = []/ b3 p: L3 Y  D5 |* K: l5 m# t
            for items in sheet_data:
' l9 f" J! X) w& _0 l  a6 e                if items[2] == None:4 U8 W% i' y* c* x8 s. s
                    continue4 o3 D* B( x5 K& k1 d( |
                data = items[2]0 y2 {+ p' G( L) T1 d
                if ',' in data or '-' in data or " " in data:+ H1 t4 K* s% C4 T
                    new_list = parse(items)
8 N3 a  |% `1 ?% p: `5 [                    for parse_list in new_list:  n4 ]4 Y$ Y. q% \& {9 _
                        new_sheet_data.append(parse_list)
+ A$ c" o2 t; b! V! {                    # print(new_list)& i0 w% D8 L: w2 ^3 H

* s6 q. x% h0 u( A3 N! R9 R
                else:4 H) x# b2 Y* G
                    new_sheet_data.append(items)6 |% T4 j$ H( J6 P8 b
            # print(new_sheet_data)
- \, q1 x' c$ [; `
            sheet2 = wb.create_sheet("new_sheet")/ g1 J$ l: l8 `/ L/ L) h
            print("创建新的sheet完成,sheet名:new_sheet")
. g, L8 l: E" P, ~            for d in new_sheet_data:
3 e  w  u8 H/ l) C8 ~4 ], ^                if isinstance(d, list):3 l, s! u- j1 q+ C# \
                    sheet2.append(d). h% G; b- z8 j
                else:* Y$ T* ^1 D8 O0 o
                    print(d, "格式不对-->", type(d))
' x. c) L3 v! N. X+ X* k" M            wb.save(data_dir + name)
& |& [) l5 k/ u2 s            wb.close()
6 D" r6 \; }8 |8 `( B            print("分解完成")
1 Z) {1 \; x8 K# \. \2 D
/ w4 u" N$ e0 h/ j+ ?3 j$ F' V3 Q# @0 w* f+ W  {# ]  c
if __name__ == '__main__':  c# N- u8 I# [
    parse_data()# D8 C9 `/ U. ?, U

7 ?1 b3 G8 q- [" v, r" S) v& k) I
7 t4 Y. Y% E( r6 b/ @% e. Z1 R
) H( P9 n: K3 d! [/ Y+ W1 ?) M, l. q2 C& f) O' ?* Q. j. K
侵权联系与免责声明1、本站资源所有言论和图片纯属用户个人意见,与本论坛立场无关
( T- Z0 T) q7 l8 `3 z2、本站所有资源收集于互联网,由用户分享,该帖子作者与瑞客论坛不享有任何版权,如有侵权请联系本站删除
* B+ f2 ?- k! E" j1 X0 {3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责
2 O, ?; {# I: n& R4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
/ ~* o( B8 l: h如有侵权联系邮箱:ruikelink@gmai.com
  u- Z# y! X$ g# K9 u资源下载地址和密码(百度云盘):
游客,如果您要查看本帖隐藏内容请回复
[/hide] 百度网盘信息回帖可见, V0 ~9 X1 y2 k  Q% N
; o: b# D# H$ r% Z5 `7 U8 `

" P( e, n- ]$ m3 T" H3 {$ Y/ L3 w# L9 Z4 _+ w5 j& r
本资源由Java自学网收集整理【www.javazx.com】
回复

使用道具 举报

该用户从未签到

5

主题

152

帖子

301

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4373

帖子

8749

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4255

帖子

8512

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4300

帖子

8602

积分

普通会员

Rank: 2

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

使用道具 举报

该用户从未签到

0

主题

4266

帖子

8532

积分

普通会员

Rank: 2

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

使用道具 举报

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

    [LV.2]登堂入室

    0

    主题

    4256

    帖子

    8578

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4224

    帖子

    8450

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4435

    帖子

    8872

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4370

    帖子

    8740

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-3 12:26 , Processed in 0.177181 second(s), 25 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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