python處理document文檔保留原樣式
document文檔格式、線(xiàn)段、圖片、頁(yè)眉頁(yè)腳等都不變,供大家參考,具體內(nèi)容如下
# -*- coding: utf-8 -*-
# @Time : 2019/5/6 11:46
# @Author :
"""
# 利用python-docx替換文章中的內(nèi)容
pip install python-docx
# 格式、線(xiàn)段、圖片、頁(yè)眉頁(yè)腳等都不變
# python-docx 在處理超鏈接的問(wèn)題時(shí),可以參考一下鏈接對(duì)源碼進(jìn)行修改
https://github.com/python-openxml/python-docx/issues/85
# 具體修改操作如下
\site-packages\docx\oxml\__init__.py
# 需要新增的代碼
def remove_hyperlink_tags(xml):
import re
text = xml.decode('utf-8')
text = text.replace("</w:hyperlink>","")
text = re.sub('<w:hyperlink[^>]*>', "", text)
return text.encode('utf-8')
# 需要修改的源碼
def parse_xml(xml):
root_element = etree.fromstring(remove_hyperlink_tags(xml), oxml_parser)
return root_element
"""
import os
from docx import Document
from win32com import client
# 自己寫(xiě)的逐句翻譯包
import doc_scan
def pre_document(filename):
"""
由于python_docx(只能讀取.docx文件,不能讀取.doc文件)
將對(duì)應(yīng)文件夾下的doc文件轉(zhuǎn)為docx文件
:param filename: 文件的絕對(duì)路徑
:return:
"""
file_tuple = os.path.splitext(filename)
if file_tuple[1] == '.doc':
word = client.Dispatch('Word.Application')
doc = word.Documents.Open(filename) # 目標(biāo)路徑下的文件
doc.SaveAs(file_tuple[0] + ".docx", 16) # 轉(zhuǎn)化后路徑下的文件
doc.Close()
word.Quit()
# 把源文件刪除
os.remove(filename)
def read_document():
"""
原文文章為中文,然后將中文逐句翻譯成英文,把英文替換原來(lái)的中文,保留文章的原樣式
:return:
"""
# 遍歷doc文件下的所有的文件
path = os.path.dirname(os.path.abspath(__file__)) + '\doc'
for f in os.listdir(path):
file = "%s\%s" % (path, f)
# 對(duì)源文件進(jìn)行預(yù)處理
pre_document(file)
document = Document(file)
for num, paragraph in enumerate(document.paragraphs):
# 獲取每段中的文字
old_text = paragraph.text.strip()
if old_text:
inlines = paragraph.runs
if inlines:
# 將原有的文章里面的內(nèi)容為空
for li, inli in enumerate(inlines):
inlines[li].text = inlines[li].text.replace(inlines[li].text, '')
new_text = doc_scan.Scan(old_text)
# 把翻譯好的文章句子 替換到 零號(hào)位置上面
inlines[0].text = new_text
# 保存文件,覆蓋操作
document.save(file)
# 將document中的圖片下載到本地
# document = Document(file)
# for shape in document.inline_shapes:
# contentID = shape._inline.graphic.graphicData.pic.blipFill.blip.embed
# contentType = document.part.related_parts[contentID].content_type
# if not contentType.startswith('image'):
# continue
# imgName = basename(document.part.related_parts[contentID].partname)
# imgData = document.part.related_parts[contentID]._blob
# with open(imgName,'wb') as fp:
# fp.write(imgData)
if __name__ == '__main__':
read_document()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python面向?qū)ο罂偨Y(jié)及類(lèi)與正則表達(dá)式詳解
Python中的類(lèi)提供了面向?qū)ο缶幊痰乃谢竟δ埽侯?lèi)的繼承機(jī)制允許多個(gè)基類(lèi),派生類(lèi)可以覆蓋基類(lèi)中的任何方法,方法中可以調(diào)用基類(lèi)中的同名方法。這篇文章主要介紹了Python面向?qū)ο罂偨Y(jié)及類(lèi)與正則表達(dá)式 ,需要的朋友可以參考下2019-04-04
TensorFlow學(xué)習(xí)之分布式的TensorFlow運(yùn)行環(huán)境
這篇文章主要了TensorFlow學(xué)習(xí)之分布式的TensorFlow運(yùn)行環(huán)境的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Python反向傳播實(shí)現(xiàn)線(xiàn)性回歸步驟詳細(xì)講解
回歸是監(jiān)督學(xué)習(xí)的一個(gè)重要問(wèn)題,回歸用于預(yù)測(cè)輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時(shí),輸出變量的值也隨之發(fā)生變化?;貧w模型正是表示從輸入變量到輸出變量之間映射的函數(shù)2022-10-10
Python循環(huán)語(yǔ)句中else的用法總結(jié)
這篇文章給大家整理了關(guān)于Python中循環(huán)語(yǔ)句中else的用法,包括常規(guī)的 if else 用法、if else 快捷用法、與 for 關(guān)鍵字一起用、與 while 關(guān)鍵字一起用以及與 try except 一起用的用法總結(jié),有需要的朋友們可以參考借鑒。2016-09-09
簡(jiǎn)單了解Python字典copy與賦值的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解Python字典copy與賦值區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
selenium XPath定位的實(shí)現(xiàn)示例
XPath是一種在XML文檔中定位和選擇節(jié)點(diǎn)的語(yǔ)言,通過(guò)路徑表達(dá)式遍歷XML樹(shù),支持節(jié)點(diǎn)選取、字符串匹配、數(shù)值計(jì)算、邏輯運(yùn)算等功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
Python輕松寫(xiě)個(gè)課堂隨機(jī)點(diǎn)名系統(tǒng)
現(xiàn)在的學(xué)生大部分都很積極,會(huì)主動(dòng)舉手回答問(wèn)題。但是,也會(huì)遇到一些不好的情況,比如年級(jí)越高主動(dòng)舉手的人越少,所以本文寫(xiě)了一個(gè)隨機(jī)的學(xué)生點(diǎn)名系統(tǒng)可以幫老師解決這些問(wèn)題2023-01-01

