原來Python處理word這么簡單:關于python操作文檔的問題

關于python操作文檔的問題

文檔類型:docx
語言:python

我想在文檔中姓名后面的下劃線之上插入一個姓名,并保存為新的文檔,
用python應該怎么實現呢
文檔見下圖

一般情況下,我們在看到題目的時候,應該先審題,看題目中有哪些難點,就是那些比較難以實現的點,比較費時費力的點,比較模糊不清的點,這些點都要提煉出來。

這個題目也是比較簡單的,先按照我們常規的人工思想來思考這個問題該怎么解決:

如果是我們人工處理的話,就是單擊到姓名后面的下劃線,然后輸入一個真實姓名,接著另存為另一個文檔名字就可以了。

那如果要程序應該怎么處理呢?

通過之前的文章我們知道,python+selenium是可以錄制操作步驟進行自動化操作的,這是一個解決問題的思路,通過錄制操作步驟導出代碼進行修改可以實現。

但是這種方式比較繁瑣,通過查找資料,python有第三方庫可以處理word:python-docx

官網例子:

```python
# 導入docx庫中的Document類和Inches類
from docx import Document
from docx.shared import Inches# 創建一個Document對象
document = Document()# 添加一個標題,級別為0
document.add_heading('文檔標題', 0)# 添加一個段落,內容為"A plain paragraph having some "
p = document.add_paragraph('A plain paragraph having some ')
# 在段落中添加加粗文本"bold"
p.add_run('bold').bold = True
# 在段落中添加普通文本" and some "
p.add_run(' and some ')
# 在段落中添加斜體文本"italic."
p.add_run('italic.').italic = True# 添加一個一級標題
document.add_heading('Heading, level 1', level=1)
# 添加一個引用樣式的段落
document.add_paragraph('Intense quote', style='Intense Quote')# 添加一個無序列表項
document.add_paragraph('first item in unordered list', style='List Bullet'
)
# 添加一個有序列表項
document.add_paragraph('first item in ordered list', style='List Number'
)# 添加一張圖片,寬度為1.25英寸
document.add_picture('monty-truth.png', width=Inches(1.25))# 定義一個記錄列表,包含三個元組,每個元組包含三個元素:數量、ID和描述
records = ((3, '101', 'Spam'),(7, '422', 'Eggs'),(4, '631', 'Spam, spam, eggs, and spam')
)# 添加一個表格,1行3列
table = document.add_table(rows=1, cols=3)
# 獲取表格的第一行單元格
hdr_cells = table.rows[0].cells
# 設置第一行單元格的文本內容
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
# 遍歷記錄列表,為表格添加行和單元格,并設置單元格的文本內容
for qty, id, desc in records:row_cells = table.add_row().cellsrow_cells[0].text = str(qty)row_cells[1].text = idrow_cells[2].text = desc# 添加一個分頁符
document.add_page_break()# 保存文檔為demo.docx
document.save('demo.docx')
```

?最終效果:

最后來看看我們帶下劃線的word怎么處理:

from docx import Document# 打開原始文檔
doc = Document('doc.docx')# 遍歷文檔中的所有段落
for para in doc.paragraphs:# 尋找包含“姓名:”的段落if '姓名:' in para.text:# 提取姓名行的文本text = para.text# 查找“姓名:”和“性別:”的位置name_start = text.find('姓名:') + len('姓名:')underscore_index = text.find('_', name_start)  # 找到姓名后的下劃線位置gender_start = text.find('性別:')  # 找到“性別:”的位置# 確保下劃線和“性別:”都存在if underscore_index != -1 and gender_start != -1:# 計算插入位置和原有姓名(不包括下劃線)insert_pos = underscore_indexoriginal_name = text[name_start:underscore_index].strip()# 清除原有段落內容para.clear()# 重新構建段落內容# 先添加“姓名:”及原姓名部分直到下劃線前para.add_run(f'姓名:{original_name}')# 在下劃線正上方插入真實姓名(這里以"張三"為例,請替換為實際姓名)real_name = "張三"para.add_run(real_name).underline = True  # 保持下劃線樣式# 繼續添加下劃線和剩余的文本,注意處理下劃線和“性別:”之間的空白para.add_run('_' + text[underscore_index+1:gender_start].strip())# 添加“性別:”及其之后的內容para.add_run(text[gender_start:])# 保存到新文檔
doc.save('newdoc.docx')

最終效果:

問題來源:

關于python操作文檔的問題_編程語言-CSDN問答

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10225.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP+B/S架構 不良事件管理系統源碼 醫院不良事件報告系統源碼,開發技術vue2+element+laravel8

PHPB/S架構 不良事件管理系統源碼 醫院不良事件報告系統源碼,開發技術vue2elementlaravel8 技術架構:前后端分離,倉儲模式,BS架構, 開發技術:PHPvscodevue2elementlaravel8mysql5.7,專業團隊研…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目錄 關鍵詞平臺說明一、ORTI概述二、ORTI文件的生成三、ORTI文件的導入四、Trace 功能4.1 Trace 功能菜單介紹4.2 Trace功能的配置4.3 Trace MCDS 設置4.4 Task Switches斷點的設置4.5 Trace 數據的錄取4.6 CPU 負載和Task調度的查看 關鍵詞 嵌入式、C語言、autosar、OS、BSW…

【高階數據結構】圖--最短路徑問題

圖--最短路徑問題 一、單源最短路徑--Dijkstra算法1、簡介2、解析3、代碼4、測試用例5、打印最小路徑代碼和測試6、缺陷:不能使用負路徑 二、單源最短路徑--Bellman-Ford算法1、簡介2、解析(1)詳情i、負權問題:一個點只跑一趟找最…

A股行情訂閱工具,支持股票/可轉債level2/level2數據

簡單使用 ./hqCenter -h-initCodesFile string啟動即訂閱的code (default "./data/initCodes.json")-listen stringhttp監聽地址 (default ":31800")-saveHqFile string行情寫入文件,自動加日期后綴。為空則不寫入文件。 (default "./data/hq")-…

PostGIS之pointcloud

瀚高數據庫 目錄 環境 文檔用途 詳細信息 環境 系統平臺:Linux x86-64 Red Hat Enterprise Linux 7 版本:14 文檔用途 本文詳細介紹pointcloud,包括:安裝配置、兩個核心數據類型、功能函數、使用PDAL讀寫pgpoingcloud數據等。 詳…

學習前端第三十四天(call,apply,函數綁定;箭頭函數;對象屬性配置)

一、call、apply function fn(x, y) { console.log("hello", x, y, this) }; 1.call方法 作用:調用后執行函數,可以給“this”傳參數 fn.call({ a: 1 }, 1, 2,); 2.apply方法 第一個給“this”傳參數,第二個參數需要是數組形式…

ElementUi中el-table組件使用row-class-name修改指定行顏色

可以通過指定 Table 組件的 row-class-name 屬性來為 Table 中的某一行添加 class,表明該行處于某種狀態。 注意:如果在el-table中使用了stripe這個屬性,這個屬性是帶斑馬紋的表格樣式,它和row-class-name共存時是沒有效果。 注…

【微信開發】微信支付前期準備工作(申請及配置)

1、申請并配置公眾號或微信小程序 1.1 賬戶申請 通過微信公眾平臺,根據指引申請微信小程序或公眾號,申請時需要微信認證,申請流程不在贅述 1.2 信息配置 申請通過后,需進入小程序和公眾號內進行信息配置 1.2.1 小程序信息配置…

Mac YOLO V9推理測試(基于ultralytics)

環境: Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、準備工作 使用YOLO一般都會接觸ultralytics這個框架,今天來試試用該框架進行YOLO V9模型的推理。 YOLOv9目前提供了四種模型下載:yolov9-c.pt、yolov9-e.pt、gelan-c.p…

lint 代碼規范,手動修復,以及vscode的第三方插件eslint自動修復

ESlint代碼規范 不是語法規范,是一種書寫風格,加多少空格,縮進多少,加不加分號,類似于書信的寫作格式 ESLint:是一個代碼檢查工具,用來檢查你的代碼是否符合指定的規則(你和你的團隊可以自行約定一套規則)…

【管理篇】如何橫向溝通?

目錄標題 什么是橫向溝通?常見溝通問題 如何處理橫向溝通中的問題? 什么是橫向溝通? 所謂橫向溝通,就是和沒有直接匯報關系的合作方之間的溝通,指的是與平級間進行的與完成工作有關的交流;橫向溝通核心的挑…

mqtt定時腳本

需求描述 給mqtt的topic發送信息 對應的topic接收請求后,執行發送短信指令 信息內容 SMS,10086,102 lua的mqtt里面,截取判斷即可 –>可以實現 定時任務, 每月開機一次 發短信? 或者使用開機通知? 定時消費…

Npm Install Docusaurus Demo【npm 安裝 docusaurus 實踐 】

文章目錄 1. 簡介2. 前提2.1 安裝 git2.2 安裝 node 3. 安裝4. 項目結構5. 訪問5.1 localhost 訪問5.2 ip 訪問 1. 簡介 Docusaurus 是一個facebook的開源項目,旨在幫助開發者構建易于維護和部署的文檔網站。它提供了一個簡單的方法來創建專業的文檔網站&#xff0…

共享旅游卡免費旅游真實反饋,有圖有真相?

新伙伴體驗,云南昆大麗6天5晚品質雙人游,真實反饋!珠海伙伴蔡總,加入千益暢行共享旅游卡團隊,自己親自體驗“云南昆大麗6天5晚品質雙人游”真實反饋,分享全程內容截圖,無半點虛假! …

2024-05-08 postgres-調試及分析-記錄

摘要: 2024-05-08 postgres-調試及分析-記錄 DDL: 創建庫表及插入數據: create database d1;\c d1;create table t1( a int, b int ); create table t2( a int, b int );insert into t1(a,b) values(3,4); insert into t1(a,b) values(5,6);insert into t2(a,b) va…

MongoDB聚合運算符:$trim

MongoDB聚合運算符&#xff1a;$trim 文章目錄 MongoDB聚合運算符&#xff1a;$trim語法使用空白字符 舉例 $trim用來刪除字符串開頭和結尾的空白字符&#xff08;包括空值&#xff09;或指定字符。 語法 { $trim: { input: <string>, chars: <string> } }input&…

react經驗15:拖拽排序組件dnd-kit的使用經驗

應用場景 列表中的成員可鼠標拖拽改變順序 實施步驟 前置引入 import type { DragEndEvent } from dnd-kit/core import { DndContext } from dnd-kit/core import {arrayMove,/*垂直列表使用verticalListSortingStrategy,橫向列表使用horizontalListSortingStrategy*/vert…

springboot引入security,測試接口報Unauthorized

1、報錯截圖 2、當前項目pom文件引入security <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId><version>2.2.2.RELEASE</version> </dependency> 3、解決…

數據結構之圖——探索圖論的奧秘

前言 在這篇文章中&#xff0c;我們一起來看看我們生活中都會用到&#xff0c;但卻不那么熟悉的數據結構——圖&#xff08;英語&#xff1a;graph&#xff09;。我們看下百科定義&#xff1a; 在計算機科學中&#xff0c;圖&#xff08;英語&#xff1a;graph&#xff09;是一…