在日常办公中,Word文档是最常用的文本处理工具之一。通过Python自动化Word文档操作,可以大幅提高工作效率,减少重复劳动,特别适合批量生成报告、合同、简历等标准化文档。本文将介绍几种常用的Python操作Word文档的方法,并提供实用的代码示例和应用场景。

使用python-docx操作Word文档

Python-docx是一个强大的库,可以用来创建、读取和修改Microsoft Word (.docx)文档。它提供了丰富的API来操作文档的各个方面,包括段落、表格、图片等。

安装python-docx

pip install python-docx

创建新的Word文档

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPEdef create_simple_document():"""创建一个简单的Word文档"""# 创建文档对象doc = Document()# 添加标题doc.add_heading('Python自动化办公指南', 0)# 添加段落p = doc.add_paragraph('使用 ')p.add_run('python-docx').bold = Truep.add_run(' 可以轻松创建和修改Word文档,这对于')p.add_run('自动化办公').italic = Truep.add_run('非常有用。')# 添加一级标题doc.add_heading('1. 文档基础', level=1)# 添加带样式的段落paragraph = doc.add_paragraph('这是一个普通段落,展示了如何添加文本内容。')paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY# 添加项目符号列表doc.add_paragraph('项目符号列表示例:', style='List Bullet')doc.add_paragraph('第一项', style='List Bullet')doc.add_paragraph('第二项', style='List Bullet')doc.add_paragraph('第三项', style='List Bullet')# 添加编号列表doc.add_paragraph('编号列表示例:', style='List Number')doc.add_paragraph('第一步', style='List Number')doc.add_paragraph('第二步', style='List Number')doc.add_paragraph('第三步', style='List Number')# 添加图片doc.add_heading('2. 插入图片', level=1)doc.add_paragraph('下面是一个图片示例:')try:doc.add_picture('example.png', width=Inches(4.0))except:doc.add_paragraph('(图片文件不存在,请替换为实际图片路径)')# 添加表格doc.add_heading('3. 创建表格', level=1)doc.add_paragraph('下面是一个3x3表格示例:')table = doc.add_table(rows=3, cols=3)table.style = 'Table Grid'# 填充表头header_cells = table.rows[0].cellsheader_cells[0].text = '姓名'header_cells[1].text = '年龄'header_cells[2].text = '职位'# 填充数据行data = [['张三', '28', '工程师'],['李四', '32', '设计师']]for i, row_data in enumerate(data):row = table.rows[i+1].cellsfor j, val in enumerate(row_data):row[j].text = val# 添加分页符doc.add_page_break()# 添加页眉和页脚section = doc.sections[0]header = section.headerheader.paragraphs[0].text = "Python自动化办公 - 页眉示例"header.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTERfooter = section.footerfooter_para = footer.paragraphs[0]footer_para.text = "第 "footer_para.add_run("PAGENUM").bold = Truefooter_para.add_run(" 页")footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER# 保存文档doc.save('简单文档示例.docx')print("文档已创建: 简单文档示例.docx")# 执行函数
create_simple_document()

修改现有Word文档

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPHdef modify_existing_document(file_path):"""修改现有Word文档"""try:# 打开现有文档doc = Document(file_path)# 修改文档标题(假设第一个段落是标题)if doc.paragraphs:title = doc.paragraphs[0]title.text = "更新后的文档标题"title.runs[0].bold = Truetitle.runs[0].font.size = Pt(18)title.alignment = WD_ALIGN_PARAGRAPH.CENTER# 在文档末尾添加新内容doc.add_heading('新增章节', level=1)doc.add_paragraph('这是修改文档后添加的新内容。')# 修改表格内容(如果存在)if doc.tables:table = doc.tables[0]  # 获取第一个表格if len(table.rows) > 1 and len(table.rows[1].cells) > 0:# 修改第二行第一列的内容table.rows[1].cells[0].text = "更新的内容"# 保存修改后的文档(可以选择另存为新文件)modified_file = "修改后_" + file_pathdoc.save(modified_file)print(f"文档已修改并保存为: {modified_file}")return Trueexcept Exception as e:print(f"修改文档时出错: {e}")return False# 使用示例
# modify_existing_document("简单文档示例.docx")

提取Word文档内容

from docx import Documentdef extract_document_content(file_path):"""提取Word文档中的内容"""try:# 打开文档doc = Document(file_path)# 提取所有段落文本paragraphs_text = [para.text for para in doc.paragraphs if para.text]print("\n文档段落内容:")for i, text in enumerate(paragraphs_text, 1):print(f"{i}. {text[:100]}{'...' if len(text) > 100 else ''}")# 提取所有表格内容tables_data = []for i, table in enumerate(doc.tables):print(f"\n表格 {i+1}:")table_data = []for row in table.rows:row_data = [cell.text for cell in row.cells]table_data.append(row_data)print(" | ".join(row_data))tables_data.append(table_data)# 返回提取的内容return {"paragraphs": paragraphs_text,"tables": tables_data}except Exception as e:print(f"提取文档内容时出错: {e}")return None# 使用示例
# content = extract_document_content("简单文档示例.docx")

创建复杂格式文档

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml.ns import qn
from docx.oxml import OxmlElementdef create_complex_document():"""创建具有复杂格式的Word文档"""# 创建文档对象doc = Document()# 设置文档样式styles = doc.styles# 创建自定义标题样式title_style = styles.add_style('CustomTitle', WD_STYLE_TYPE.PARAGRAPH)title_font = title_style.fonttitle_font.name = '微软雅黑'title_font.size = Pt(24)title_font.bold = Truetitle_font.color.rgb = RGBColor(0, 112, 192)  # 蓝色# 添加标题title = doc.add_paragraph("项目进度报告", style='CustomTitle')title.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加日期from datetime import datedate_paragraph = doc.add_paragraph(f"日期: {date.today().strftime('%Y年%m月%d日')}")date_paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT# 添加分隔线p = doc.add_paragraph()p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.SINGLErun = p.add_run("_" * 80)run.font.color.rgb = RGBColor(192, 192, 192)  # 浅灰色# 添加项目概述doc.add_heading("1. 项目概述", level=1)doc.add_paragraph("本项目旨在开发一套自动化办公系统,提高企业内部文档处理效率。""系统将集成多种功能,包括文档生成、数据分析和报表输出等。")# 添加项目进度表doc.add_heading("2. 项目进度", level=1)progress_table = doc.add_table(rows=1, cols=4)progress_table.style = 'Table Grid'# 设置表头header_cells = progress_table.rows[0].cellsheaders = ["阶段", "计划完成时间", "实际完成时间", "完成度"]for i, header in enumerate(headers):header_cells[i].text = header# 设置表头背景色shading_elm = OxmlElement('w:shd')shading_elm.set(qn('w:fill'), "D9E1F2")  # 浅蓝色背景header_cells[i]._tc.get_or_add_tcPr().append(shading_elm)# 添加数据行progress_data = [["需求分析", "2023-01-15", "2023-01-20", "100%"],["系统设计", "2023-02-28", "2023-03-05", "100%"],["开发阶段", "2023-05-30", "进行中", "65%"],["测试阶段", "2023-06-30", "未开始", "0%"],["部署上线", "2023-07-15", "未开始", "0%"]]for data_row in progress_data:row_cells = progress_table.add_row().cellsfor i, val in enumerate(data_row):row_cells[i].text = val# 调整表格宽度for cell in progress_table.columns[0].cells:cell.width = Inches(1.5)for cell in progress_table.columns[3].cells:cell.width = Inches(1.0)# 添加风险评估doc.add_heading("3. 风险评估", level=1)# 添加带颜色的风险等级risk_para = doc.add_paragraph("当前项目风险等级: ")risk_run = risk_para.add_run("中等")risk_run.font.color.rgb = RGBColor(255, 192, 0)  # 橙色risk_run.font.bold = True# 添加风险列表doc.add_paragraph("主要风险因素:", style='List Bullet')risks = ["技术实现难度超出预期","团队成员变动","需求变更频繁"]for risk in risks:doc.add_paragraph(risk, style='List Bullet')# 添加下一步计划doc.add_heading("4. 下一步计划", level=1)next_steps = ["完成核心功能开发","开始内部测试","准备用户培训材料"]for i, step in enumerate(next_steps, 1):doc.add_paragraph(f"{i}. {step}", style='List Number')# 添加页脚section = doc.sections[0]footer = section.footerfooter_para = footer.paragraphs[0]footer_para.text = "机密文件 - 仅供内部使用"footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER# 保存文档doc.save('项目进度报告.docx')print("复杂格式文档已创建: 项目进度报告.docx")# 执行函数
# create_complex_document()

使用docx-mailmerge填充Word模板

Word模板是包含固定格式设置和版式设置的Word文件,通过模板文件,可以快速生成美观的Word文档,而不再需要重新设置各种样式的参数。docx-mailmerge库可以方便地将数据填充到Word模板中的占位符位置。

安装docx-mailmerge

pip install docx-mailmerge

创建Word模板

首先,需要在Word中创建一个包含合并域的模板文件。合并域是特殊的占位符,格式为«字段名»

在Word中创建合并域的步骤:

  1. 打开Word,创建新文档
  2. 点击「插入」选项卡
  3. 点击「快速部件」→「域」
  4. 在「域」对话框中,选择「MergeField」
  5. 在「域名称」中输入你的字段名(如「name」、「date」等)
  6. 点击「确定」

使用Python填充Word模板

from mailmerge import MailMerge
from datetime import datedef fill_word_template(template_path, output_path, data):"""填充Word模板文件"""try:# 打开模板文件document = MailMerge(template_path)# 显示模板中的所有合并域print("模板中的合并域:", document.get_merge_fields())# 填充数据document.merge(**data)# 保存生成的文档document.write(output_path)print(f"已生成文档: {output_path}")return Trueexcept Exception as e:print(f"填充模板时出错: {e}")return False# 使用示例 - 填充简单的信函模板
def generate_letter():# 假设我们有一个名为"letter_template.docx"的模板,包含以下合并域:# «recipient_name», «recipient_address», «date», «subject», «content», «sender_name», «sender_title»# 准备数据letter_data = {'recipient_name': '张三','recipient_address': '北京市海淀区中关村南大街5号','date': date.today().strftime('%Y年%m月%d日'),'subject': '项目合作邀请','content': '我们诚挚地邀请贵公司参与我们即将启动的人工智能项目合作。该项目旨在开发一套智能办公系统,提高企业运营效率。\n\n我们了解到贵公司在相关领域有丰富的经验,相信通过合作,我们可以共同创造更大的价值。\n\n期待您的回复。','sender_name': '李四','sender_title': '项目经理'}# 填充模板fill_word_template('letter_template.docx', '项目合作邀请函.docx', letter_data)# 使用示例 - 批量生成证书
def generate_certificates():# 假设我们有一个名为"certificate_template.docx"的模板,包含以下合并域:# «name», «course», «date», «instructor», «certificate_id»# 准备多组数据students = [{'name': '王小明','course': 'Python高级编程','date': '2023年6月15日','instructor': '张教授','certificate_id': 'CERT-2023-001'},{'name': '李小红','course': 'Python高级编程','date': '2023年6月15日','instructor': '张教授','certificate_id': 'CERT-2023-002'},{'name': '赵小青','course': 'Python高级编程','date': '2023年6月15日','instructor': '张教授','certificate_id': 'CERT-2023-003'}]# 批量生成证书for i, student in enumerate(students):output_file = f"证书_{student['name']}.docx"fill_word_template('certificate_template.docx', output_file, student)# 执行函数
# generate_letter()
# generate_certificates()

处理表格和重复项

from mailmerge import MailMergedef fill_template_with_tables():"""填充包含表格和重复项的Word模板"""# 假设我们有一个名为"report_template.docx"的模板# 该模板包含普通合并域和表格中的合并域# 打开模板document = MailMerge('report_template.docx')# 显示所有合并域print("模板中的合并域:", document.get_merge_fields())# 填充普通合并域document.merge(report_title='月度销售报告',report_date='2023年7月1日',prepared_by='市场部',total_sales='¥1,234,567.00')# 准备表格数据(假设模板中有一个表格,包含产品销售数据)# 表格中的合并域格式为: «product:X», «quantity:X», «unit_price:X», «subtotal:X»# 其中X是行索引sales_data = [{'product': '笔记本电脑','quantity': '10','unit_price': '¥5,999.00','subtotal': '¥59,990.00'},{'product': '办公椅','quantity': '20','unit_price': '¥899.00','subtotal': '¥17,980.00'},{'product': '打印机','quantity': '5','unit_price': '¥1,299.00','subtotal': '¥6,495.00'}]# 合并表格数据document.merge_rows('product', sales_data)# 保存生成的文档document.write('月度销售报告.docx')print("已生成报告: 月度销售报告.docx")# 执行函数
# fill_template_with_tables()

实际应用场景

场景一:自动生成合同

from mailmerge import MailMerge
from datetime import date
import osdef generate_contract(contract_data, template_path, output_dir):"""根据模板自动生成合同"""# 确保输出目录存在if not os.path.exists(output_dir):os.makedirs(output_dir)# 合同文件名contract_filename = f"合同_{contract_data['contract_id']}_{contract_data['client_name']}.docx"output_path = os.path.join(output_dir, contract_filename)try:# 打开模板document = MailMerge(template_path)# 填充合同数据document.merge(**contract_data)# 保存生成的合同document.write(output_path)print(f"已生成合同: {contract_filename}")return output_pathexcept Exception as e:print(f"生成合同时出错: {e}")return None# 使用示例
def batch_generate_contracts():# 合同模板路径template_path = "contract_template.docx"# 输出目录output_dir = "generated_contracts"# 准备多份合同数据contracts = [{'contract_id': 'CT-2023-001','client_name': '北京科技有限公司','client_address': '北京市朝阳区建国路88号','client_representative': '王总','contract_date': date.today().strftime('%Y年%m月%d日'),'start_date': '2023年8月1日','end_date': '2024年7月31日','contract_amount': '¥500,000.00','payment_terms': '分三期支付,首期款¥200,000.00,第二期款¥150,000.00,尾款¥150,000.00','service_scope': '软件开发、系统维护、技术支持','our_company': '智能科技有限公司','our_representative': '张总','our_address': '上海市浦东新区张江高科技园区'},{'contract_id': 'CT-2023-002','client_name': '广州贸易有限公司','client_address': '广州市天河区珠江新城','client_representative': '李总','contract_date': date.today().strftime('%Y年%m月%d日'),'start_date': '2023年9月1日','end_date': '2024年8月31日','contract_amount': '¥350,000.00','payment_terms': '分两期支付,首期款¥200,000.00,尾款¥150,000.00','service_scope': '系统集成、数据迁移、用户培训','our_company': '智能科技有限公司','our_representative': '张总','our_address': '上海市浦东新区张江高科技园区'}]# 批量生成合同generated_files = []for contract_data in contracts:contract_file = generate_contract(contract_data, template_path, output_dir)if contract_file:generated_files.append(contract_file)print(f"共生成 {len(generated_files)} 份合同文件")return generated_files# 执行批量生成合同
# batch_generate_contracts()

场景二:自动生成个性化简历

from docx import Document
from docx.shared import Pt, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
import osdef create_resume(person_data, output_path):"""创建个性化简历"""# 创建文档doc = Document()# 设置页边距sections = doc.sectionsfor section in sections:section.top_margin = Inches(0.8)section.bottom_margin = Inches(0.8)section.left_margin = Inches(0.8)section.right_margin = Inches(0.8)# 添加姓名作为标题name = doc.add_heading(person_data['name'], 0)name.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加联系方式contact_info = f"电话: {person_data['phone']} | 邮箱: {person_data['email']} | 地址: {person_data['address']}"contact = doc.add_paragraph(contact_info)contact.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加分隔线doc.add_paragraph('_' * 80)# 添加个人简介doc.add_heading('个人简介', level=1)doc.add_paragraph(person_data['summary'])# 添加教育背景doc.add_heading('教育背景', level=1)for edu in person_data['education']:p = doc.add_paragraph()p.add_run(f"{edu['school']} - {edu['degree']}").bold = Truep.add_run(f"\n{edu['date']}")p.add_run(f"\n{edu['description']}")# 添加工作经验doc.add_heading('工作经验', level=1)for job in person_data['experience']:p = doc.add_paragraph()p.add_run(f"{job['company']} - {job['position']}").bold = Truep.add_run(f"\n{job['date']}")# 添加工作职责doc.add_paragraph('职责:', style='List Bullet')for responsibility in job['responsibilities']:doc.add_paragraph(responsibility, style='List Bullet')# 添加技能doc.add_heading('技能', level=1)for category, skills in person_data['skills'].items():p = doc.add_paragraph()p.add_run(f"{category}: ").bold = Truep.add_run(', '.join(skills))# 保存文档doc.save(output_path)print(f"简历已生成: {output_path}")return output_path# 使用示例
def generate_sample_resume():# 准备简历数据resume_data = {'name': '张三','phone': '138-1234-5678','email': 'zhangsan@example.com','address': '北京市海淀区','summary': '资深软件工程师,拥有8年Python开发经验,专注于数据分析和自动化系统开发。具有良好的团队协作能力和项目管理经验。','education': [{'school': '北京大学','degree': '计算机科学学士','date': '2010 - 2014','description': '主修计算机科学与技术,辅修数学。GPA 3.8/4.0。'},{'school': '清华大学','degree': '软件工程硕士','date': '2014 - 2016','description': '研究方向:机器学习与数据挖掘。'}],'experience': [{'company': 'ABC科技有限公司','position': '高级软件工程师','date': '2019 - 至今','responsibilities': ['负责公司核心数据处理平台的设计和开发','优化数据处理流程,提高系统性能30%','带领5人团队完成多个重要项目','引入自动化测试,提高代码质量']},{'company': 'XYZ信息技术公司','position': '软件工程师','date': '2016 - 2019','responsibilities': ['参与开发企业级数据分析系统','设计并实现数据可视化模块','编写技术文档和用户手册','为新员工提供技术培训']}],'skills': {'编程语言': ['Python', 'Java', 'JavaScript', 'SQL'],'框架与工具': ['Django', 'Flask', 'React', 'Docker', 'Git'],'数据库': ['MySQL', 'MongoDB', 'Redis'],'其他': ['数据分析', '机器学习', '项目管理', '团队协作']}}# 生成简历return create_resume(resume_data, '张三_个人简历.docx')# 执行生成简历
# generate_sample_resume()

场景三:自动生成周报/月报

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from datetime import datetime, timedelta
import calendardef generate_weekly_report(week_data, output_path):"""生成周报"""# 创建文档doc = Document()# 添加标题title = doc.add_heading(f"{week_data['department']}周报", 0)title.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加报告期间period = doc.add_paragraph(f"报告期间: {week_data['start_date']}{week_data['end_date']}")period.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加报告人和日期reporter = doc.add_paragraph(f"报告人: {week_data['reporter']}\t\t报告日期: {week_data['report_date']}")reporter.alignment = WD_ALIGN_PARAGRAPH.RIGHT# 添加分隔线doc.add_paragraph('_' * 80)# 本周工作总结doc.add_heading('一、本周工作总结', level=1)for i, task in enumerate(week_data['completed_tasks'], 1):p = doc.add_paragraph(f"{i}. ", style='List Number')p.add_run(task['name']).bold = Truep.add_run(f"\n   完成情况: {task['status']}")p.add_run(f"\n   工作内容: {task['description']}")# 下周工作计划doc.add_heading('二、下周工作计划', level=1)for i, task in enumerate(week_data['planned_tasks'], 1):p = doc.add_paragraph(f"{i}. ", style='List Number')p.add_run(task['name']).bold = Truep.add_run(f"\n   计划时间: {task['planned_time']}")p.add_run(f"\n   工作内容: {task['description']}")# 问题与建议if week_data['issues']:doc.add_heading('三、问题与建议', level=1)for i, issue in enumerate(week_data['issues'], 1):p = doc.add_paragraph(f"{i}. ", style='List Number')p.add_run(issue['title']).bold = Truep.add_run(f"\n   问题描述: {issue['description']}")if issue.get('solution'):p.add_run(f"\n   解决方案: {issue['solution']}")# 保存文档doc.save(output_path)print(f"周报已生成: {output_path}")return output_path# 使用示例
def create_sample_weekly_report():# 计算上周的日期范围today = datetime.now()start_of_last_week = today - timedelta(days=today.weekday() + 7)end_of_last_week = start_of_last_week + timedelta(days=6)# 准备周报数据week_data = {'department': '技术部','start_date': start_of_last_week.strftime('%Y年%m月%d日'),'end_date': end_of_last_week.strftime('%Y年%m月%d日'),'reporter': '张三','report_date': today.strftime('%Y年%m月%d日'),'completed_tasks': [{'name': '用户管理模块开发','status': '已完成','description': '完成了用户注册、登录、权限管理等功能的开发和单元测试。'},{'name': '数据导入功能优化','status': '已完成','description': '优化了大数据量导入的性能,提高了处理速度约40%。'},{'name': 'Bug修复','status': '进行中 (80%)','description': '修复了上周反馈的10个Bug中的8个,剩余2个正在处理中。'}],'planned_tasks': [{'name': '完成剩余Bug修复','planned_time': '下周一至周二','description': '解决剩余的2个Bug,并进行回归测试。'},{'name': '开始报表模块开发','planned_time': '下周三至周五','description': '设计并实现数据报表功能,包括数据统计和可视化展示。'},{'name': '代码审查与重构','planned_time': '下周五','description': '对现有代码进行审查,优化代码结构和性能。'}],'issues': [{'title': '性能问题','description': '在高并发情况下,系统响应速度明显下降。','solution': '计划通过引入缓存机制和优化数据库查询来解决。'},{'title': '团队协作效率','description': '当前的代码版本管理流程较为复杂,影响开发效率。','solution': '建议简化Git工作流,并加强团队培训。'}]}# 生成周报return generate_weekly_report(week_data, f"技术部周报_{week_data['start_date']}_{week_data['end_date']}.docx")# 执行生成周报
# create_sample_weekly_report()

通过以上代码示例和应用场景,你可以轻松掌握Python Word文档自动化的各种技巧,大幅提高工作效率。无论是创建简单的文档,还是生成复杂的报告、合同或简历,Python都能帮你轻松应对。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92965.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92965.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92965.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺序表的总结及模拟实现

目录 一.线性表 二.顺序表 1.概念 2.结构 3.要实现的接口函数 三.模拟实现顺序表 1.定义出顺序表的基本结构 2.实现检查扩容功能 3.实现尾插 4.实现尾删 5.实现头插和头删 6.查找 7.修改 8.遍历 9.在指定位置插入和删除 四.顺序表的优缺点及思考 a.顺序表的弊端 …

Vue3 vs Vue2:全面对比与面试宝典

文章目录Vue3 vs Vue2:全面对比与面试宝典引言:Vue框架的进化之路一、核心架构对比二、响应式系统的革命Vue2的响应式:像老式监控摄像头Vue3的响应式:像智能AI监控系统三、API风格的进化Vue2的Options API:像填表格Vue…

Java Web开发:Session与Cookie详细入门指南

在Web开发中,状态管理是核心需求之一。本文将深入讲解Java中Session和Cookie的使用方法,帮助你掌握用户状态管理的核心技术。 一、Session与Cookie基础概念 特性SessionCookie存储位置服务器内存/持久化存储客户端浏览器安全性较高(敏感数据…

HTTPS与CA证书:安全通信全解析

CA(Certificate Authority):证书颁发机构,负责签发和管理数字证书,验证证书持有者的身份。HTTPS:基于 SSL/TLS 协议的 HTTP,通过证书实现客户端与服务器的身份验证和数据加密。HTTPSHTTPSSL/TLS…

AI生成代码时代的商业模式重构:从“软件即产品”到“价值即服务”

2025年,全球AI代码生成市场规模突破63亿元(数据来源:《中国AI代码生成行业发展报告》),开发者效率提升40%以上,软件开发成本下降30%。这一技术浪潮正在颠覆传统软件行业的商业逻辑——当代码生成变得像文字编辑一样简单时,企业如何构建可持续的商业模式? 本文将从硬件…

C#特性与反射知识梳理

C#中的**特性(Attributes)和反射(Reflection)**是两个非常重要的概念,它们通常用于代码的元编程,允许你在运行时获取类型信息并对其进行操作。下面对这两个概念进行详细梳理:一、C#中的特性&…

SQL 语法详解

SQL 语法详解 引言 SQL(Structured Query Language)是一种用于数据库管理的标准语言,它允许用户进行数据的查询、更新、插入和删除等操作。SQL语法是数据库管理和编程的基础,本篇文章将详细介绍SQL的基本语法和常用操作&#xff0…

为什么 sim(3) 中的尺度 s 与旋转 R 相乘,而不是平移 t?

文章目录为什么 sim(3) 中的尺度 s 与旋转 R 相乘,而不是平移 t?1️⃣ sim(3) vs SE(3):结构对比与核心差异2️⃣ 为什么尺度 s 不乘在 t 上?🚫 数学破坏:🧭 几何解释:3️⃣ t 是“相…

如何为你的 Docker 容器设置代理网络

一文搞定!如何为你的 Docker 容器设置代理网络(及一个最常见的“坑”) 你是否遇到过这样的窘境:在你的服务器上,代理工具(比如 Clash, V2Ray)运行得好好的,浏览器也能科学上网,但一旦把应用放进 Docker 容器,它就瞬间“失联”,无法访问外部世界? 别担心,这是每个…

LeetCode Day3 -- 哈希表

目录 1. 啥是哈希表? 2. 啥时候用哈希表? 2.1 存在性检查 → 集合Set 2.2 键值映射 → 字典Dict 2.3 频率统计 → Dict or Counter 3. LeetCode 3.1 集合 (1)2215 找出两数组的不同 (2)1207 独一无…

三子棋装置(电赛24E题)K230/STM32全开源

三子棋装置(电赛24E题)K230/STM32全开源,后续有具体代码参数讲解,帮助大家移植k230代码import time, os, sysfrom media.sensor import * from media.display import * from media.media import *from machine import UART from m…

终端安全检测与防御

1. 终端安全风险主要问题:企业网络中80%的安全事件源于终端,终端成为黑客攻击的重要目标。攻击手段:勒索病毒:直接勒索用户。横向渗透:通过受控终端攻击内部服务器。僵尸网络危害:信息窃取、钓鱼网站引导、…

Video_AVI_Packet(2)

博主声明:内容来自网络,仅供参考,仅适用于浅了解,如有错误,自行甄别,由此引起的后果概不负责 Video_AVI_Packet(2)一、Video Picture Aspect Ratio 与 Active Format Aspect Ratio1.…

八月补丁星期二:微软修复 111 个漏洞

微软将在2025 年 8 月补丁星期二修复 111 个漏洞,这一数量与近期平均水平大致相同。 与上个月的情况类似,微软知道今天发布的漏洞中只有一个已被公开披露,但声称没有证据表明存在野外利用。同样,截至发布时,唯一的补丁…

《C++进阶之继承多态》【普通类/模板类的继承 + 父类子类的转换 + 继承的作用域 + 子类的默认成员函数】

【普通类/模板类的继承 父类&子类的转换 继承的作用域 子类的默认构造函数】目录前言:------------------------一、继承的定义和使用1. 什么使继承?2. 为什么要引入继承?3. 怎么使用继承?① 父类(基类&#xf…

Ubuntu22.04安装OBS Studio

OBS官网的最新的虽然支持Ubuntu系统,但是只支持最新的24.2版本的,而我的电脑上的Ubuntu的版本是22.04,所以在网上寻求解决办法,看到了这一片博客,作为参考来实现ubuntu22.04安装OBS,这里提示一下&#xff0…

Ansible 基本使用

Ansible 清单 静态主机清单 主机清单支持多种格式,例如ini、yaml、脚本等。 本次课程使用 ini 格式。 #创建主机清单[lykcontroller ~ 13:36:01]# vim inventory#vim添加controllernode1node2node3node4​#测试连接单个服务器[lykcontroller ~ 14:08:18]$ ansibl…

网络资源模板--基于Android Studio 实现的九寨沟App

目录 一、测试环境说明 二、项目简介 三、项目演示 四、部设计详情(部分) 首页 购票页面 五、项目源码 一、测试环境说明 电脑环境 Windows 11 编写语言 JAVA 开发软件 Android Studio (2020) 开发软件只要大于等于测试版本即可(近几年官网直接下载也…

系统架构设计师备考之架构设计实践知识

1.信息系统架构设计理论与实践1.1.基本概念信息系统架构定义目前关于信息系统架构较为权威的定义有: (1)信息系统架构是系统的结构,由软件元素、元素外部可见属性和元素间关系组成。 (2)信息系统架构是软件…

【IgH EtherCAT】如何利用 RTAI 提供的实时任务和调度机制来构建一个高精度、确定性的工业控制应用

SVG图展示了系统的分层架构:RTAI实时层:包含RT_TASK、信号量和定时器EtherCAT Master层:主站、域、从站配置和PDO映射EtherCAT网络层:与实际硬件设备(EL3162模拟输入、EL2004数字输出)通信关键特点&#xf…