基于CSV与python-docx的电子工艺实习报告自动化
简介这份《北京邮电大学电子工艺实习报告》面向通信工程、电子信息工程等专业的本科生与实习指导教师用于完整复盘电子工艺实习全流程。报告以机器狗项目为主线涵盖电烙铁与万用表使用、半导体二极管与电解电容等有极性元件的极性判断、色环电阻读数、电路原理图与印制板图识读并延伸至表面贴装工艺SMT的流程与EDA工具应用。手工焊接部分细述焊料焊剂作用、五步焊接法、元件插放顺序及虚焊、桥接、拉尖等常见缺陷的成因与规避经验同时记录Multisim电路设计与仿真、整机调试验收与成绩评定方式知识点成体系可直接作为撰写实习报告与复盘实操的参考。资源包含1个docx文档压缩包约136KB含完整正文与附页内容已有726人学习下载。1. 电子工艺实习报告.docx 的交付难点实习最后一天焊台已经断电桌上只剩一把色环电阻、几段剪短的焊锡丝和一张记着八个电压值的便签。这些散落的数字最后都要落进一个叫电子工艺实习报告.docx的文件里而且要求排版规范、图表编号连续、数据能反推回工艺过程。真正的难点从来不是焊接手法而是两段转换先把工艺过程变成可追溯的记录再把记录变成结构化的文档。焊点是否光亮、回流曲线是否落在窗口内、三极管引脚有没有认错在工位上靠手感在报告里必须靠判据和表格说话。这份内容适合两类人正在做电子工艺实习、需要一份经得起评阅的报告以及要给产线或培训做工艺记录模板的工程师。核心思路是用 CSV 存数据、用 python-docx 生成 docx、用域做编号最后命令行导出 PDF。2. 从焊台到表格电子工艺实习报告的数据怎么攒2.1 先把焊接工艺参数固定成可记录项工艺参数不固定后面的分析全是空话。手工焊接和回流焊的记录维度不一样前者关心单点热输入后者关心整条温度曲线。下面这张表是常见做法实际取值按你手上的焊锡牌号和设备微调。工艺环节关键参数常见取值记录要求手工焊接有铅 Sn63Pb37烙铁头温度 / 单点时间 / 焊丝直径320~350 ℃ / 1~3 s / 0.6~0.8 mm每批测温一次异常点单独标注手工焊接无铅 SAC305同上350~380 ℃ / 2~4 s温度比有铅高 30 ℃ 左右时间略长回流焊峰值区峰值温度 / 液相线以上时间235~245 ℃ / 45~90 s保存曲线截图并记峰值读数预热与恒温区升温速率 / 恒温时间1~3 ℃/s / 60~90 s记录助焊剂活化是否充分冷却区冷却速率≤ 4 ℃/s冷得太快容易产生应力与立碑表里最容易被忽略的是冷却速率。很多报告只写峰值温度结果样品出现立碑或焊点发脆找不到解释。冷却速率是回流曲线里唯一「事后无法补救」的段记录它等于给缺陷留了证据链。2.2 测点记录用 CSV不要在 Word 里手敲Word 表格里手打数据改一个值就要重新核对全表而且没法做允差判断。常见做法是先用 CSV 存原始值判定结果由脚本算。序号,测点,标称值,实测值,单位,允差,仪器,时间戳 1,VCC 对地电压,5.00,4.96,V,0.10,UT61E,2024-11-05T09:12 2,R12 阻值,1000,988,Ω,50,UT61E,2024-11-05T09:18 3,D3 正向压降,0.70,0.68,V,0.05,UT61E,2024-11-05T09:24 4,三极管基极电流,0.20,0.19,mA,0.02,UT61E,2024-11-05T09:31接下来说判定。允差写成绝对值列脚本逐行比较输出「合格 / 超差」超差行在报告里必须有一条原因说明不能默默改数。# check_points.py —— 对测点表做允差判定并生成可贴进报告的结论行 import csv SRC measure_points.csv DST measure_points_checked.csv with open(SRC, encodingutf-8-sig) as f_in, \ open(DST, w, encodingutf-8-sig, newline) as f_out: reader csv.DictReader(f_in) writer csv.DictWriter(f_out, fieldnamesreader.fieldnames [偏差, 判定]) writer.writeheader() for row in reader: # 三类数值列都转成 float避免字符串比较导致 9.6 10.0 这类误判 measured float(row[实测值]) nominal float(row[标称值]) tol float(row[允差]) deviation round(measured - nominal, 3) writer.writerow({ **row, 偏差: deviation, 判定: 合格 if abs(deviation) tol else 超差, })这段脚本的关键在encodingutf-8-sig。Excel 另存的 CSV 带 BOM用普通 utf-8 读第一个列名会变成\ufeff序号DictReader取到的键就对不上。参数上允差用的是绝对偏差而非百分比如果测点量程跨度大比如同时有 5 V 和 0.2 mA建议再加一列允差类型把百分比换算成绝对值后再写回保持判定口径统一。2.3 元器件检测与故障注入怎么留痕报告里的「故障分析」章节九成写成了流水账。可行的做法是主动设计故障点再记录测试手段和判据让它变成一次可复现的验证。器件/环节万用表档位正常判据典型异常现象色环电阻电阻档与色环读数偏差 ≤ 5%读数跳动多为引脚氧化二极管二极管档硅管正向 0.5~0.7 V反向不通双向导通说明已击穿发光二极管二极管档正向 1.8~2.2 V 并微弱发光不亮且压降正常查限流电阻焊点连通性通断档蜂鸣阻值 30 Ω蜂鸣断续多为虚焊电容极性电阻档容值随充电缓慢上升容值不动可能开路通断档的 30 Ω 阈值是常见做法但探针接触电阻本身就有几欧所以贴着蜂鸣临界值的点最好再用电阻档复核一次别直接判合格。3. 用 python-docx 把测点数据写成规范初稿3.1 先定样式表再写内容直接往空白文档里写最后一定在调格式上耗掉整晚。正确顺序是先做一份带样式的模板report_template.docx把标题、正文、题注、表格文字的样式全部定义好脚本只负责套样式。样式名基于中文字体字号段前/段后用途Heading 1无黑体16 pt12/12 pt一级章节Heading 2Heading 1黑体14 pt6/6 pt二级小节Normal无宋体12 pt0/0正文首行缩进 2 字符CaptionNormal楷体10.5 pt6/6 pt图表题注居中TableTextNormal宋体10.5 pt0/0表格内容无缩进「基于」这一列是重点。Heading 2 基于 Heading 1改一次 Heading 1 的字号下面所有层级跟着变TableText 基于 Normal 但不继承首行缩进否则表格里每一格都顶两格空白看着像排版事故。3.2 图号表号用 SEQ 域别手写编号手写的「图 3-2」在插入一张图之后全部作废。Word 的SEQ域能自动递增python-docx 没有直接 API需要拼一小段 XML。from docx.oxml import OxmlElement from docx.oxml.ns import qn def add_caption(paragraph, prefix图): 在题注段落里插入 SEQ 域Word 打开后按 F9 自动编号 run paragraph.add_run(f{prefix} ) fld OxmlElement(w:fldSimple) fld.set(qn(w:instr), r SEQ 图 \* ARABIC ) paragraph._p.append(fld)w:instr里的\* ARABIC控制输出阿拉伯数字如果学院要求「图一」这种格式换成\* CHINESEBU1。域刚插入时是空的Word 里全选按 F9 才会显示编号所以生成完必须走一次刷新否则打开是一串空白。3.3 生成脚本从 CSV 到成稿表格# build_report.py —— 把判定后的测点表写进报告初稿 import csv from docx import Document from docx.shared import Pt from docx.oxml.ns import qn TEMPLATE report_template.docx SRC measure_points_checked.csv OUT 电子工艺实习报告_初稿.docx HEADER [序号, 测点, 标称值, 实测值, 偏差, 判定] def set_cjk(run, name宋体, size10.5, boldFalse): run.font.name name run.font.size Pt(size) run.bold bold # 中文字体必须单独写 eastAsia只设 font.name 在 Word 里会回落到默认字体 run._element.rPr.rFonts.set(qn(w:eastAsia), name) doc Document(TEMPLATE) doc.add_heading(2 焊接与检测数据, level1) doc.add_heading(2.2 测点记录, level2) rows list(csv.DictReader(open(SRC, encodingutf-8-sig))) table doc.add_table(rows1, colslen(HEADER)) table.style Table Grid for cell, text in zip(table.rows[0].cells, HEADER): cell.text text for para in cell.paragraphs: para.style doc.styles[TableText] for r in para.runs: set_cjk(r, 黑体, 10.5, True) for idx, row in enumerate(rows, 1): cells table.add_row().cells values [idx, row[测点], row[标称值], row[实测值], row[偏差], row[判定]] for cell, value in zip(cells, values): cell.text str(value) for para in cell.paragraphs: para.style doc.styles[TableText] for r in para.runs: set_cjk(r, 宋体, 10.5) # 超差行单独标注报告中必须给出原因 bad [r for r in rows if r[判定] 超差] if bad: doc.add_heading(2.3 超差项说明, level2) for r in bad: doc.add_paragraph(f{r[测点]} 偏差 {r[偏差]} {r[单位]}超出允差 {r[允差]}原因为……) doc.save(OUT)levels顺序不能乱add_heading(..., level2)前必须先有 level 1否则 Word 大纲里会出现没有父级的孤儿节点自动生成目录时层级错位。table.style Table Grid是模板里存在的样式名如果你用的是自定义表格样式名字必须与模板完全一致写错会抛KeyError。3.4 生成后做三项自检生成完别直接交跑一遍检查一级标题数量是否与章节规划一致、表格行数是否等于 CSV 行数加表头、正文总字数是否达到要求。# 从 docx 里抽纯文本做字数与标题层级自查 python -c from docx import Document d Document(电子工艺实习报告_初稿.docx) h1 [p.text for p in d.paragraphs if p.style.name Heading 1] print(一级标题:, h1) print(正文字数:, sum(len(p.text) for p in d.paragraphs)) print(表格数:, len(d.tables), 首表行数:, len(d.tables[0].rows)) 输出的表格行数应当是「数据行数 1」。少一行通常是 CSV 末尾有空行让DictReader少读了一条多一行则说明表头被算了两次。4. 工艺分析章节怎么写才算有技术含量4.1 把「焊点不亮」翻译成可判定项评阅人不会追问你焊得亮不亮但会问你凭什么判定这个点是虚焊。下面这张判据表是报告里最该出现的东西它把主观描述换成了检查动作。缺陷外观特征常见成因判定动作虚焊焊料成球未润湿焊盘温度不足、焊盘氧化通断档测阻值 30 Ω 或蜂鸣断续桥连相邻引脚被焊料连通焊锡过多、拖焊角度不对通断档测相邻引脚蜂鸣即桥连立碑贴片元件一端翘起两端受热不均、冷却过快目视加放大镜倾斜即判不合格少锡焊点凹陷引脚轮廓外露送锡不足、助焊剂挥发目视检查引脚是否完全包覆冷焊表面粗糙呈豆腐渣状焊接时元件被移动轻拨引脚晃动即判不合格注意「轻拨引脚」这一步力度要控制在用手指轻推的程度。反复大力拨动会把本来合格的焊点掰松反而制造出缺陷这类操作在报告里最好注明手法。4.2 检测数据的出图规范报告里的图不是给屏幕看的是打印出来给评阅人看的。中文字体缺失会变成一个个方框分辨率不够会糊成一团。# plot_check.py —— 生成报告用的允差对比图 import matplotlib matplotlib.use(Agg) # 无界面环境必须指定后端否则在服务器上会报错 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] # 中文字体回退列表 plt.rcParams[axes.unicode_minus] False # 负号正常显示 plt.rcParams[font.size] 10.5 points [VCC, R12, D3, Ib] dev [0.04, -0.012, -0.02, -0.01] tol [0.10, 0.05, 0.05, 0.02] fig, ax plt.subplots(figsize(5.5, 3.2), dpi300) # dpi300 满足打印精度 ax.bar(points, dev, color#4a6fa5, width0.5, label实测偏差) ax.plot(points, tol, r--, linewidth1.2, label允差上限) ax.axhline(0, color#333, linewidth0.8) ax.set_ylabel(偏差 / 单位) ax.legend(locupper right, frameonFalse) fig.tight_layout() fig.savefig(tolerance.png, bbox_inchestight) # 裁掉多余白边避免插入后留大片空白figsize按正文栏宽算A4 页面单栏约 16 cm5.5 英寸换算过来差不多插进去不会被 Word 自动缩放。frameonFalse去掉图例边框打印时更干净。4.3 允差和结论之间的那条线常见误用是把「在允差内」直接写成「性能良好」。允差只说明这一批样品落在设计预期内不代表工艺窗口宽。真正有信息量的写法是给出余量偏差绝对值占允差的比例超过 70% 就要在报告里点出来说明该测点对工艺波动敏感。另一个坑是采样点太少。四个测点画不出趋势硬画出来的折线只是把点连起来。测点不足时老老实实用柱状图或表格比强上折线图可信。5. 定稿域更新、导出 PDF 与版本对照5.1 目录和题注域要一次性刷新域插入后是空白的必须在 Word 里全选CtrlA再按 F9选择「更新整个目录」。有交叉引用的文档要按两次 F9第一次刷目录第二次刷正文里的图表引用。如果打开文档时 Word 提示是否更新域选「是」别选「否」否则目录页码会停留在上一次的状态。5.2 命令行导出 PDF 并核对交付格式如果要求 docx 和 PDF 双份用 LibreOffice 批量转换比手工另存更稳也方便写进脚本。# 无界面导出 PDF输出目录必须已存在 soffice --headless --convert-to pdf --outdir ./dist 电子工艺实习报告_初稿.docx # 核对页数与文本是否完整pdftotext 属于 poppler-utils pdfinfo ./dist/电子工艺实习报告_初稿.pdf | grep -E Pages|Page size pdftotext ./dist/电子工艺实习报告_初稿.pdf - | wc -m--outdir指定的目录不存在时转换会静默失败只留下一个空目录。pdftotext出来的字符数应当与 docx 正文量级接近如果少了一大截多半是字体嵌入失败导致部分文本丢失回 Word 里换字体再导一次。检查项期望结果不通过时先看哪里目录页码与正文实际页码一致是否漏按 F9图表编号连续无跳号SEQ 域是否被复制成静态文本中文字体PDF 中无方框系统是否装了报告用的字体表格行数CSV 行数 1编码 BOM 是否被识别超差项每项都有原因说明2.3 节是否生成5.3 用 difflib 对照两版报告改完一版最怕的是改了这里崩了那里。用脚本抽出两版正文做行级对照比肉眼翻快得多。# diff_docx.py —— 对比两版 docx 的正文差异 import difflib from docx import Document def dump(path): d Document(path) return [p.text for p in d.paragraphs if p.text.strip()] old, new dump(电子工艺实习报告_v1.docx), dump(电子工艺实习报告_v2.docx) for line in difflib.unified_diff(old, new, lineterm, n0): print(line)n0表示只输出变更行、不带上文输出短但要看清楚是哪一节建议改成n2保留两行上下文。这个方法只比文本表格内容需要额外遍历d.tables取单元格图片和格式变化不会体现所以它是核对手段不是最终校对。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联
返回资讯列表 →