【辦公自動化】如何使用Python讓Word文檔處理自動化?

在日常辦公中,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…