python处理document文档保留原样式

 更新时间:2019年09月23日 10:32:28   作者:Cocktail_py  
这篇文章主要为大家详细介绍了python处理document文档保留原样式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

document文档格式、线段、图片、页眉页脚等都不变,供大家参考,具体内容如下

# -*- coding: utf-8 -*-
# @Time  : 2019/5/6 11:46
# @Author :
"""
# 利用python-docx替换文章中的内容

pip install python-docx
# 格式、线段、图片、页眉页脚等都不变
# python-docx 在处理超链接的问题时,可以参考一下链接对源码进行修改
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

# 自己写的逐句翻译包
import doc_scan


def pre_document(filename):
  """
  由于python_docx(只能读取.docx文件,不能读取.doc文件)
  将对应文件夹下的doc文件转为docx文件
  :param filename: 文件的绝对路径
  :return:
  """

  file_tuple = os.path.splitext(filename)
  if file_tuple[1] == '.doc':
    word = client.Dispatch('Word.Application')
    doc = word.Documents.Open(filename) # 目标路径下的文件
    doc.SaveAs(file_tuple[0] + ".docx", 16) # 转化后路径下的文件
    doc.Close()
    word.Quit()
    # 把源文件删除
    os.remove(filename)


def read_document():
  """
  原文文章为中文,然后将中文逐句翻译成英文,把英文替换原来的中文,保留文章的原样式
  :return:
  """
  # 遍历doc文件下的所有的文件
  path = os.path.dirname(os.path.abspath(__file__)) + '\doc'
  for f in os.listdir(path):
    file = "%s\%s" % (path, f)
    # 对源文件进行预处理
    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:
          # 将原有的文章里面的内容为空
          for li, inli in enumerate(inlines):
            inlines[li].text = inlines[li].text.replace(inlines[li].text, '')
          new_text = doc_scan.Scan(old_text)

          # 把翻译好的文章句子 替换到 零号位置上面
          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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python中if语句的使用方法详解

    Python中if语句的使用方法详解

    if语句用来表示某种可能的情况,并如何处理该情况。if语句可以用来表示一种可能性、两种可能性或者多种可能性,这篇文章主要介绍了Python中if语句的使用方法,需要的朋友可以参考下
    2023-03-03
  • python中利用h5py模块读取h5文件中的主键方法

    python中利用h5py模块读取h5文件中的主键方法

    今天小编就为大家分享一篇python中利用h5py模块读取h5文件中的主键方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现远程调用MetaSploit的方法

    Python实现远程调用MetaSploit的方法

    这篇文章主要介绍了Python实现远程调用MetaSploit的方法,是很有借鉴价值的一个技巧,需要的朋友可以参考下
    2014-08-08
  • Anaconda安装后Spyder闪退解决办法

    Anaconda安装后Spyder闪退解决办法

    作为研究深度学习的一员,经常会遇到各种突如其来的bug,最近又碰到了一个关于spyder打开后又闪退的问题,下面这篇文章主要给大家介绍了关于Anaconda安装后Spyder闪退的解决办法,需要的朋友可以参考下
    2023-04-04
  • python获取代理IP的实例分享

    python获取代理IP的实例分享

    今天小编就为大家分享一篇python获取代理IP的实例分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python中@符号的用法小结

    Python中@符号的用法小结

    @符号在Python中最常见的使用情况是在装饰器中,本文主要介绍了Python中@符号的用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • python图的深度优先和广度优先算法实例分析

    python图的深度优先和广度优先算法实例分析

    这篇文章主要介绍了python图的深度优先和广度优先算法,结合实例形式分析了图的深度优先算法与广度优先算法相关概念、原理、实现技巧与操作注意事项,需要的朋友可以参考下
    2019-10-10
  • python获取目录下所有文件的方法

    python获取目录下所有文件的方法

    这篇文章主要介绍了python获取目录下所有文件的方法,实例分析了Python中os模块下walk方法的使用技巧,需要的朋友可以参考下
    2015-06-06
  • python如何使用base加密解密

    python如何使用base加密解密

    base编码是一种加密解密措施,目前常用的有base16、base32和base64,以base64为例,base64加密后共有64中字符,本文给大家分享python使用base加密解密的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • python中websockets与主线程传递参数的实现

    python中websockets与主线程传递参数的实现

    本文主要介绍了python中websockets与主线程传递参数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02

最新评论