import sys,json,hashlib,zipfile,re from pathlib import Path from lxml import etree as E P=Path(__file__).parent;P.mkdir(exist_ok=True) base=Path('D:/WechatRecord/xwechat_files/wxid_vmeut7wztkbp22_1546') temp=base/'temp/RWTemp/2026-10/c40afdcfa98e2b4561823e6babbefa33' names=['4-STP-SG-003-01有机黑果枸杞生产工艺规程.docx','4-STP-DY-007黑果枸杞生产工艺规程.docx','STP-SG-002-04冻干枸杞生产工艺规程.docx','4-STP-GT-015-04沙棘原浆罐头生产工艺规程(1).docx','4-STP-GT-016-04黑果枸杞原浆罐头生产工艺规程.docx','4-STP-GT-015-04沙棘原浆罐头生产工艺规程.docx','STP-GY-001-06即食藜麦粉R型生产工艺规程.docx','STP-DY-001-02黑果枸杞袋泡茶生产工艺规程.docx','STP-GT-009-07枸杞原浆罐头生产工艺规程.docx','STP-GY-002-05即食藜麦粉B型生产工艺规程.docx','4-STP-SG-001-09黑果枸杞生产工艺规程.docx','4-STP-GT-010-05黑果枸杞玫瑰果膏生产工艺规程(1).docx'] files=[temp/n for n in names] root=base/'msg/attach/c40afdcfa98e2b4561823e6babbefa33/2026-10/Rec' for folder,ns in [('f15a297ebf87a553',['4-STP-FB-005铁棍山药粉生产工艺规程.docx','4-STP-YL-006桑葚原浆生产工艺规程.docx','4-STP-YL-016红黑枸杞原浆生产工艺规程.docx','4-STP-YL-008益生元西梅饮生产工艺规程.docx','4-STP-YL-010γ-氨基丁酸酸枣仁饮品(桃子味)生.docx','4-STP-YL-016红黑枸杞原浆生产工艺规程.docx','4-STP-YL-015人参枸杞原浆生产工艺规程.docx','4-STP-YL-018黑果枸杞桑葚原浆生产工艺规程.docx']),('a679d4d8551b6d72',['4-STP-YL-009γ-氨基丁酸营养素饮品(蜜桃味)生.docx','4-STP-YL-012蓝莓叶黄素DHA饮品生产工艺规程.docx','4-STP-YL-017人参葛根枳椇子玉米低聚肽饮品生产.docx','4-STP-YL-011西梅原浆生产工艺规程.docx','4-STP-YL-007燕窝肽γ-氨基丁酸鱼胶原蛋白肽饮品.docx','4-STP-YL-013DHA藻油饮品生产工艺规程.docx'])]: for i,n in enumerate(ns,1 if folder=='f15a297ebf87a553' else 0):files.append(root/folder/'F'/str(i)/n) out=[] ns={'w':'http://schemas.openxmlformats.org/wordprocessingml/2006/main','a':'http://schemas.openxmlformats.org/drawingml/2006/main'} for i,f in enumerate(files,1): assert f.is_file(),str(f) data=f.read_bytes(); rec={'id':i,'file':str(f),'name':f.name,'sha256':hashlib.sha256(data).hexdigest()} with zipfile.ZipFile(f) as z: xml=z.read('word/document.xml');rootx=E.fromstring(xml) paras=[] for p in rootx.xpath('//w:p',namespaces=ns): text=''.join(p.xpath('.//w:t/text()',namespaces=ns)) if text.strip():paras.append(text) rec['paragraphs']=paras; rec['drawing_text']=rootx.xpath('//a:t/text()',namespaces=ns) media=[] for path in z.namelist(): if path.startswith('word/media/'): dst=P/'media'/str(i)/Path(path).name;dst.parent.mkdir(parents=True,exist_ok=True);dst.write_bytes(z.read(path));media.append(str(dst)) rec['media']=media (P/f'{i:02d}-document.xml').write_bytes(xml) out.append(rec) (P/f'{i:02d}-提取文本.txt').write_text('\n'.join(f'[{j}] {t}' for j,t in enumerate(paras)),encoding='utf8') (P/'documents.json').write_text(json.dumps(out,ensure_ascii=False,indent=2),encoding='utf8') print(json.dumps([{'id':x['id'],'name':x['name'],'paragraphs':len(x['paragraphs']),'media':len(x['media']),'hash':x['sha256'][:12]} for x in out],ensure_ascii=False))