from pathlib import Path
from copy import copy
import json,hashlib,io
from openpyxl import load_workbook
from openpyxl.styles import Font,PatternFill,Border,Side,Alignment
from openpyxl.comments import Comment
from openpyxl.chart import BarChart,Reference
from openpyxl.chart.label import DataLabelList
from openpyxl.worksheet.pagebreak import Break
P=Path(__file__).resolve().parent
BASE=P.parent
SOURCE=Path('/Users/jack/同步空间/cpt/05_经营管理与会议/005_日常管理/周例会（事业部层面）/2026年/数字技术中心&交付实施部周报20260817.xlsx')
HASH=hashlib.sha256(SOURCE.read_bytes()).hexdigest()
live=json.loads((BASE/'delivery-source-summary.json').read_text())
w=load_workbook(SOURCE)
BLUE='1557A0';BG='E7F1FC';ORANGE='B44D0C';OG='FFF0DE';NAVY='17365D';TEAL='004D45';LINE='CAD6E3';WHITE='FFFFFF'
style_title=copy(w['交付中项目']['A1']._style)
style_subtitle=copy(w['交付中项目']['A2']._style)
style_header=copy(w['交付中项目']['A4']._style)
style_body=copy(w['交付中项目']['A5']._style)
style_product_title=copy(w['02-前厅营养结算']['A1']._style)
style_product_subtitle=copy(w['02-前厅营养结算']['A2']._style)
comment_source='来源：本任务已核对的9月4日周会、企业微信项目总表/明细与原产研周报。详细证据见同目录上级source-summary.md；计划不是已完成。'
# Keep the three original product pages as hidden reference instead of overwriting their screenshots.
for name in ['02-前厅营养结算','03-智慧食安监管','04-智慧进销存']:
 original=w[name];original.title='参考-'+name;original.sheet_state='hidden';w.create_sheet(name)
visible=['项目经营大屏','交付实施部管理概况','交付中项目','硬件与证书申请','02-前厅营养结算','03-智慧食安监管','04-智慧进销存']
for sh in w:
 sh.sheet_state='visible' if sh.title in visible else 'hidden'
 if sh.sheet_state=='hidden':
  sh['A1']='历史参考｜8月17日原周报资料，不计入本周成果'
  for row in sh:
   for c in row:
    if c.data_type=='f' and str(c.value).startswith('=HYPERLINK('):
     c.value='原版5+2产品能力资料';c.hyperlink='https://img.kxunpt.cn/public/ai-marketing-platform/work/2026-08-06-smart-canteen-marketing-infographics/smart-canteen-marketing-infographics-v2.html'

def reset(sh):
 for r in list(sh.merged_cells.ranges):sh.unmerge_cells(str(r))
 sh._images=[];sh._charts=[];sh.delete_rows(1,sh.max_row)
 sh.column_dimensions.clear();sh.row_dimensions.clear()
 sh.sheet_view.showGridLines=False;sh.sheet_view.zoomScale=85
 sh.sheet_properties.pageSetUpPr.fitToPage=True
 sh.page_setup.orientation='landscape';sh.page_setup.paperSize=sh.PAPERSIZE_A3
 sh.page_setup.fitToWidth=1;sh.page_setup.fitToHeight=1
 sh.page_margins.left=.25;sh.page_margins.right=.25;sh.page_margins.top=.35;sh.page_margins.bottom=.35
 sh.print_options.horizontalCentered=True
 sh.oddFooter.center.text='数字技术中心&交付实施部周报｜08.31—09.06';sh.oddFooter.right.text='&P / &N'
 sh.freeze_panes='C5'

def cell(sh,r,c,text,bg=None,color=None,bold=False):
 q=sh.cell(r,c,text);q._style=copy(style_body);q.font=Font(name='微软雅黑',size=12,bold=bold,color=color or '243347');q.alignment=Alignment(wrap_text=True,vertical='center');q.border=Border(left=Side(style='thin',color=LINE),right=Side(style='thin',color=LINE),top=Side(style='thin',color=LINE),bottom=Side(style='thin',color=LINE))
 if bg:q.fill=PatternFill('solid',fgColor=bg)
 return q

def merge(sh,r,c1,c2,text,style=None,bg=None,color=None,bold=False):
 sh.merge_cells(start_row=r,start_column=c1,end_row=r,end_column=c2)
 q=cell(sh,r,c1,text,bg,color,bold)
 if style:q._style=copy(style);q.alignment=Alignment(wrap_text=True,vertical='center')
 return q

def top(sh,title,line,product=False,cols=14):
 reset(sh)
 for j in range(1,cols+1):sh.column_dimensions[__import__('openpyxl').utils.get_column_letter(j)].width=12
 merge(sh,1,1,cols,title,style_product_title if product else style_title);sh.row_dimensions[1].height=32
 merge(sh,2,1,cols,line,style_product_subtitle if product else style_subtitle);sh.row_dimensions[2].height=46
 merge(sh,3,1,cols,'本周：8/31—9/6（资料截至9/5）  ｜  下周：9/7—9/13  ｜  蓝色：本周已发生；橙色：下周计划。',bg='F4F7FA');sh.row_dimensions[3].height=25
 sh.print_title_rows='1:4'

def band(sh,r,title,cols=14):merge(sh,r,1,cols,title,bg=NAVY,color=WHITE,bold=True);sh.row_dimensions[r].height=26

# 1: retain dashboard-led opening, replacing stale August screenshot figures with the verified current snapshot.
s=w['项目经营大屏'];top(s,'第一部分｜项目经营大屏','本周先看交付盘子：在途项目16条，9月目标20个；当前应集中抓验收和项目收尾。')
for a,b,label,value in [(1,4,'项目总表｜有名称记录','52条'),(6,9,'交付阶段｜未标完成','16条'),(11,14,'9月交付目标','20个')]:
 merge(s,5,a,b,label,bg=NAVY,color=WHITE,bold=True);merge(s,6,a,b,value,bg=BG,color=BLUE,bold=True)
s.row_dimensions[5].height=30;s.row_dimensions[6].height=44
band(s,8,'项目阶段分布（存量快照）')
for row,vals in enumerate([['阶段','条目数'],['交付',18],['售后',30],['售前',3],['筹备',1]],10):
 merge(s,row,1,3,vals[0],bg=BG if row==10 else None);cell(s,row,4,vals[1],bg=BG if row==10 else None);s.row_dimensions[row].height=27
chart=BarChart();chart.type='bar';chart.title='52条项目记录的阶段分布';chart.style=10;chart.add_data(Reference(s,min_col=4,min_row=10,max_row=14),titles_from_data=True);chart.set_categories(Reference(s,min_col=1,min_row=11,max_row=14));chart.legend=None;chart.width=21;chart.height=7;chart.dataLabels=DataLabelList();chart.dataLabels.showVal=True;chart.dataLabels.showCatName=False;chart.dataLabels.showSerName=False;chart.dataLabels.showLegendKey=False;s.add_chart(chart,'F9')
band(s,19,'这页讲两句话')
merge(s,20,1,14,'本周：多个项目已完成现场部署或功能测试，但还需要客户试运行、问题收尾和验收确认。',bg=BG,color=BLUE);s.row_dimensions[20].height=34
merge(s,21,1,14,'下周：先保哈尔滨、安徽体职院等节点，再收央美、滨州、四方达的验收条件。',bg=OG,color=ORANGE);s.row_dimensions[21].height=34
merge(s,23,1,14,'口径：52条含历史售后，不是本周完成数；16条是交付阶段未标完成的存量。9月验收记录未填齐，暂不报达成率。',bg='F4F7FA');s.row_dimensions[23].height=34
s['A23'].comment=Comment('总表53行，其中52行有项目名；交付阶段18条，2条已标完成，16条未标完成。阶段统计由企业微信SQL回读。原模板8月经营大屏截图未作为本周数据复用。','Codex');s.print_area='A1:N23'
# 2: preserve management overview, now a concise speaking page.
s=w['交付实施部管理概况'];top(s,'第二部分｜交付实施部管理概况','本周有交付进展，主要偏差是日期、到货和范围未对齐。下周把责任、节点和验收结果放到一张表里。')
band(s,5,'一、9月目标')
merge(s,6,1,4,'交付目标：20个项目/月',bg=BG,color=BLUE,bold=True);merge(s,6,5,14,'金额目标待统一：会议提出600万元/月，同时提出四个月2200万元。',bg=BG,color=BLUE);s.row_dimensions[6].height=38
merge(s,7,1,14,'下周先确认绩效计入岗位和金额口径。项目验收、交付金额、回款分别统计。',bg=OG,color=ORANGE);s.row_dimensions[7].height=34
band(s,9,'二、本周情况 → 下周重点')
management=[
('重点交付','央美现场联调、滨州跟餐、四方达补贴功能测试均有进展。','完成央美培训与差异核对；滨州问题收尾；四方达进入试运行。'),
('节点保障','哈尔滨到货和多端联调仍有依赖；安徽安装资源、金斯瑞物流需落实。','9/7统一哈尔滨日期；落实安徽9/8安装资源；金斯瑞到货后排人。'),
('范围与成本','三全总部范围在确认；重庆持续有需求调整。','范围、工期、费用一起确认；三全总部验证通过后再复制到其他基地。'),
('产研支撑','原产研周报96项，68项明确完成，28项未闭环。','先收遗留支付、营养数据、设备异常，再安排新功能。'),
('团队协同','周会明确每项要讲目标、结果、偏差、办法和完成时间。','产品定范围、研发定版本、交付定现场节点；超范围需求同步评估工期。')]
for r,(topic,this,nxt) in enumerate(management,11):
 merge(s,r,1,2,topic,bold=True);merge(s,r,3,8,this,bg=BG,color=BLUE);merge(s,r,9,14,nxt,bg=OG,color=ORANGE);s.row_dimensions[r].height=67
band(s,17,'三、需要协调的三件事')
for r,t in enumerate(['1. 哈尔滨：周会9/15联调、9/22交付，与总表9/23上线统一成一份排期。','2. 安徽体职院、富士康、金斯瑞：确认人、货、场地、安装费和签收时间。','3. 大庆油田：确认开发估时和定制比例是否已发出；将需求边界落实到交付计划。'],18):merge(s,r,1,14,t,bg=OG,color=ORANGE);s.row_dimensions[r].height=35
merge(s,22,1,14,'售前与售后：下周准备固安宣武医院9/14—18售前；落实北体大培训与维修配件；完成商户号、证书配置培训资料。',bg='F4F7FA');s.row_dimensions[22].height=38;s.print_area='A1:N22'
# 3: actual template column grouping and merged-cell design, with concise language.
s=w['交付中项目'];top(s,'第三部分｜交付中项目：本周8项重点','本周重点是现场联调和运营准备；下周重点是锁定交付日期、处理遗留问题、取得客户确认。')
widths=[6,11,18,17,13,13,13,13,15,17,25,22,13,12]
for i,v in enumerate(widths,1):s.column_dimensions[__import__('openpyxl').utils.get_column_letter(i)].width=v
heads=[(1,1,'序号'),(2,2,'类型'),(3,3,'项目'),(4,4,'当前阶段'),(5,6,'本周进展'),(7,8,'下周目标'),(9,9,'负责人'),(10,10,'下周节点'),(11,11,'偏差/需协调'),(12,12,'9月目标'),(13,13,'验收状态'),(14,14,'来源')]
for a,b,t in heads:merge(s,4,a,b,t,style_header)
s.row_dimensions[4].height=30
rows=[
('企业','哈尔滨膳质舍','部署/联调','主从机、小程序完成部署；体检机测试和机器人接口推进。','锁到货与联调计划，跑通体测到手机/PC展示。','海宇/赵野','9/7锁排期；9/13预检','9/15、9/22与总表9/23不一致。','9/15联调、9/22交付；日期待统一','待验收'),
('学校','中央美院','运营准备','现场联调有进展，采购差异梳理为10个工作包。','先核实10项差异，完成培训与跟餐，明确剩余工期。','柴玉龙/李潇','9/7—8核差异','可运营与合同全验收仍有差距。','完成运营准备；合同收口日待核','待验收'),
('学校','滨州','跟餐/收尾','完成跟餐、学生指导；升级消费机处理闪退。','复测扫码、人脸、离线补传，完成撤场交接。','侯世伟/王金洋','9/11复测','重启只是临时处理，部分问题未根治。','开学保障收尾，转稳定运维','待验收'),
('企业','四方达','试运行准备','完成补贴功能与终端接网测试，召开上线推进会。','组织两部门试运行，核对补贴、消费与结余。','赵野/赖清涛','暂按9/9起','客户配合与域名等旧问题需确认关闭。','试运行通过后正式切换','待试运行'),
('企业','三全','范围确认/联调','总部蓝图已形成；支付宝付款码用户确认上线。','确认总部范围，补支付退款对账，锁设备与网络节点。','赵野/李潇','9/13前收支付项','其余5基地未启动，外采平台对接需单评。','先验总部，再安排其余基地','分项验收'),
('政企','重庆环卫','现场交付','已达到进场标准，多端隐藏调整完成。','冻结本轮范围，完成450/410取用量等现场复测。','柴玉龙/赵野','9/13主要交付','需求变化影响工期和费用。','主要交付1周，整体1—2周','待验收'),
('院校','安徽体职院','安装准备','30台动感单车安装任务已明确。','落实安装人员与费用，逐台测试并签收。','海宇/赵野','9/8原目标','人力与安装费用未落实，节点含义待确认。','完成本次30台交付','待签收'),
('企业','富士康','进场准备','明确34个摄像头、留样秤交付范围。','锁进场日、点位和物料，按6天倒排执行。','海宇','进场前锁定','6天计划尚无明确起止日。','按现场条件确定交付日','待启动')]
for r,data in enumerate(rows,5):
 vals=[r-4,*data,'周会/总明细']
 for (a,b,_),v in zip(heads,vals):
  q=merge(s,r,a,b,v,bg=BG if a==5 else OG if a==7 else None,color=BLUE if a==5 else ORANGE if a==7 else None)
  q.comment=Comment(comment_source,'Codex')
 s.row_dimensions[r].height=76
band(s,14,'其他项目：只讲本周偏差与下周动作')
other=[('江西体科医','9/24或9/28上线口径不一；下周锁定日期与服务器交付。'),('金斯瑞','取餐柜到货日未确认；先查物流，再按到货后3天排安装。'),('城市副中心','已有PAD培训，但功能上线范围待核；下周解决屏幕失灵、口水罩划手。'),('安徽武警部队','需求、公式、身份及内网等12项前置未定；下周确认范围和开发顺序。'),('国信/张家港','国信补当前版本和验收剩余项；张家港锁接口、人员和交付排期。'),('北体大','人脸误识别仍需对照测试；下周确认方案与9/15后培训安排。')]
for r,(name,t) in enumerate(other,16):merge(s,r,1,3,name,bold=True);merge(s,r,4,14,t,bg=OG,color=ORANGE);s.row_dimensions[r].height=37
s.column_dimensions['N'].hidden=True;s.print_area='A1:M21';s.page_setup.fitToHeight=1
s['K6'].comment=Comment('当前无卡码脸能力以用户最新确认优先；原模板预期步骤不能视为上线。13块屏与设备清单2块数据大屏的统计范围待核；这里只用“现场联调有进展”表达，详见上一版证据审计。','Codex')
# 4: match the original hardware planning plus compliance timetable layout.
s=w['硬件与证书申请'];top(s,'第四部分｜硬件与证书申请','硬件本周以稳定性修复为主；下周把支付、离线同步和称重展示做完现场回归。等保继续按整改与签发节点跟进。')
band(s,5,'硬件工作')
for a,b,t in [(1,3,'设备/工作'),(4,8,'本周进展'),(9,13,'下周目标'),(14,14,'场景')]:merge(s,6,a,b,t,style_header)
hardware=[
('消费机/支付宝','三全付款码支付已获用户上线确认。','补退款、对账及真机回归。','三全'),
('绑盘机/人员同步','完成分页和耗时日志等代码改动。','验证锁卡、离线、补传不重扣。','滨州/央美'),
('410/450/460称重台','推荐量和累计取用量字段已接入。','逐型号复测；明确450/460逃单迁移排期。','重庆/滨州'),
('AI菜品识别','完成分类及相机配置等代码修复。','完成目标设备测试；新需求单独排期。','三全'),
('体检机/炒菜机器人','体检机阶段测试、机器人接口方案有进展。','跑通报告展示；确认机器人联调窗口。','哈尔滨')]
for r,(name,this,nxt,site) in enumerate(hardware,7):
 merge(s,r,1,3,name);merge(s,r,4,8,this,bg=BG,color=BLUE);merge(s,r,9,13,nxt,bg=OG,color=ORANGE);cell(s,r,14,site);s.row_dimensions[r].height=64
band(s,13,'资质、部署与标准资料')
for r,(name,this,nxt,goal) in enumerate([
('三级等保','整改和备案仍需继续跟进。','核实原9/6备案目标结果；推进整改、复测和用章。','9/25测评报告为争取目标'),
('软著申请','已纳入三SPU产品建设台账。','盘点已有证书和本次需申请的软件版本。','缺少新增申请/签发证据'),
('一键部署','V1.0.0部署包有产出；食安部署中心16项测试通过。','在测试环境完成一次安装和回滚验证。','先验证，再推广到项目')],15):
 merge(s,r,1,3,name);merge(s,r,4,8,this,bg=BG,color=BLUE);merge(s,r,9,12,nxt,bg=OG,color=ORANGE);merge(s,r,13,14,goal);s.row_dimensions[r].height=76
merge(s,19,1,14,'本周形成的代码和材料仍需现场验证；证书以正式签发为准。下周具体排期由对应负责人确认。',bg='F4F7FA');s.row_dimensions[19].height=36;s.print_area='A1:N19'
# 5-7: preserve original three-product narrative (positioning -> workflow -> work on each terminal -> value).
products=[
('02-前厅营养结算','第五部分｜前厅营养结算与健康管理','本周补齐结算、补贴和设备稳定性；下周重点把支付对账、营养展示和异常恢复验证完整。','餐前准备 → 餐中取餐/结算 → 营养采集 → 餐后健康反馈',[
('PC端','补单、补贴核算、订单修复与图片规范已有产出。','完成营养历史数据抽检，确认消费限制规则。','四方达/滨州'),
('移动端','哈尔滨小程序完成部署，体检指标接口继续推进。','完成体检报告展示联调，处理首次支付问题。','哈尔滨'),
('大屏端','营养大屏改版评审和竞品分析完成。','确认滨州/哈尔滨页面与指标，核对后台数据。','滨州/哈尔滨'),
('设备端','付款码上线；同步、离线、相机等完成多项代码修复。','补支付退款对账、锁卡离线和逐型号回归。','三全/滨州')],
'9月重点：形成一套可演示、可安装、可交接的前厅标准版本；项目差异单独管理。','这条产品线是本周主要增量。既要把钱算清，也要让体检、用餐和营养反馈连起来。'),
('03-智慧食安监管','第六部分｜智慧食安监管','本周完成部分食安问题修复和版本边界梳理；下周重点验证摄像头、预警与处置流程。','晨检/准入 → 视频与加工监管 → 留样检测 → 预警处置 → 追溯公示',[
('PC端','完成敏感数据清理、央美食安问题修复及三版本边界梳理。','优化初始样式，核对菜单和项目遗留问题。','央美/三全'),
('移动端','本周没有独立新增版本的确认记录。','确认巡检、整改回传的现有功能与缺项。','验证项目待定'),
('大屏端','监管大屏已进入产品清单，本周无独立上线记录。','确认告警、处置和设备状态的展示口径。','验证项目待定'),
('设备端','央美摄像头和AI盒子有部署联调记录。','验证事件上报和断线恢复；锁富士康点位。','央美/富士康')],
'9月重点：形成可部署的食安版本，补齐“发现问题—处理—复核”的完整演示和验收。','食安这周重点是修问题、理边界。下周要拿到可操作的整改流程，而不只展示视频。'),
('04-智慧进销存','第七部分｜智慧进销存与后厨运营','本周完成批量排菜等功能，三全和哈尔滨继续细化方案；下周先锁范围，再做业务联调。','排菜 → 食材需求 → 采购 → 验收入库 → 库存出库 → 成本复盘',[
('PC端','周复制、批量排菜完成；三全蓝图和机器人接口方案形成。','锁总部范围，验证菜单到采购/库存的一个完整样例。','三全/哈尔滨'),
('移动端','旧宫中学完成进销存和手持机培训。','把收货、出入库、打印操作整理为统一检查单。','旧宫中学'),
('大屏端','已有库存/成本看板规划，本周无独立新增上线记录。','确认指标和数据源，明确首版范围与排期。','三全（建议）'),
('设备端','炒菜机器人接口范围和业务表映射更新。','确认厂商窗口，验证任务下发和执行回执。','哈尔滨')],
'9月重点：三全总部先形成可用流程，再复制到其他基地；机器人保持独立集成边界。','这条线先解决“怎么管菜单、采购和库存”。多平台比价和机器人属于额外集成，不能混入标配。')]
for name,title,lead,flow,data,month,speak in products:
 s=w[name];top(s,title,lead,True)
 merge(s,5,1,14,'业务闭环｜'+flow,bg='E0F2F1',color=TEAL,bold=True);s.row_dimensions[5].height=36
 for a,b,t in [(1,2,'端'),(3,7,'本周进展'),(8,12,'下周目标'),(13,14,'项目验证')]:merge(s,7,a,b,t,style_header)
 for r,(end,this,nxt,site) in enumerate(data,8):
  merge(s,r,1,2,end,bold=True);merge(s,r,3,7,this,bg=BG,color=BLUE);merge(s,r,8,12,nxt,bg=OG,color=ORANGE);merge(s,r,13,14,site);s.row_dimensions[r].height=86
 band(s,13,'9月方向')
 merge(s,14,1,14,month,bg='E0F2F1',color=TEAL,bold=True);s.row_dimensions[14].height=48
 merge(s,16,1,14,'汇报重点｜'+speak,bg='F4F7FA');s.row_dimensions[16].height=48
 merge(s,18,1,14,'注：本页9月方向是结合当前项目提出的产品目标，需产品负责人确认；未验证能力不写成已完成。原产品说明、截图和明细保留在隐藏参考页。',bg='F4F7FA');s.row_dimensions[18].height=37
 s.print_area='A1:N18'
 for row in s.iter_rows(min_row=8,max_row=11):
  for c in row:
   if c.value:c.comment=Comment(comment_source,'Codex')
# Frontload exactly the 7 speaking pages; original reference pages remain available for expansion.
w._sheets=[w[n] for n in visible]+[s for s in w if s.title not in visible]
for sh in w:
 for row in sh:
  for c in row:
   f=copy(c.font);f.name='微软雅黑';f.sz=12;c.font=f
 sh.sheet_view.tabSelected=False
w.active=0;w[visible[0]].sheet_view.tabSelected=True
OUT=P/'数字技术中心&交付实施部周报20260906_沿用0817模板.xlsx'
w.save(OUT)
assert hashlib.sha256(SOURCE.read_bytes()).hexdigest()==HASH
(P/'source-receipt.json').write_text(json.dumps({'template':str(SOURCE),'template_sha256':HASH,'output_sha256':hashlib.sha256(OUT.read_bytes()).hexdigest(),'visible_sheets':visible,'reference_sheets':len(w.sheetnames)-7,'project_focus_count':8,'product_ends':12,'original_unchanged':True},ensure_ascii=False,indent=2))
(P/'report-speaking-notes.md').write_text('''# 周会讲述提纲（按Excel顺序）

1. **先说整体。** 这周现场和功能都有进展，下周重点是把试运行、问题收尾和客户验收接上。总表交付阶段还有16条没标完成，9月目标是20个项目；目前验收日期未填齐，先把实际结果补回来。
2. **再说交付。** 哈尔滨要先把日期、人和货对齐；央美已进入运营准备，但10项差异仍要逐项核清；滨州抓稳定性收尾；四方达按下周试运行推进。三全先把总部跑通，重庆先控制变更。安徽和富士康重点是现场资源。
3. **说需要协调的事。** 第一是哈尔滨与江西的日期；第二是设备到货、安装费与人员；第三是三全和大庆等项目的定制范围。希望下周把这些落实成一个负责人、一个时间、一项交付结果。
4. **说硬件与资质。** 本周硬件修复有产出，下周重点补真机回归、离线补传和支付对账。等保先核实原9月6日目标的实际结果，继续推动9月25日测评报告；软著按证书原件与申请台账管理。
5. **最后说产品。** 按三个SPU、四个端看，本周增量主要在前厅；食安先把预警整改流程验证完整；进销存先把总部的菜单、采购和库存流程跑通。项目里验证过的能力，再回到标准产品版本。

金额口径被问到时：会议是600万元/月与四个月2200万元，需要统一；不把存量合同额当成当月收入或回款。
''')
print(json.dumps({'output':str(OUT),'visible':visible,'hidden':len(w.sheetnames)-7,'size':OUT.stat().st_size},ensure_ascii=False))
