python读写word文档-docx和docx2txt包使用实例

简介

doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比 doc文件所占用空间更小。docx格式的文件本质上是一个ZIP文件,所以其实也可以把.docx文件直接改成.zip,解压后,里面的 word/document.xml包含了Word文档的大部分内容,图片文件则保存在word/media里面。

docx包

python-docx不支持.doc文件,间接解决方法是在代码里面先把.doc转为.docx。

python-docx模块会把word文档中的段落、文本、字体等看作对象,处理对象。

  • Document对象:一个word文档
  • Paragraph对象:word文档中的一个段落
  • Paragraph对象的text属性:段落的文本内容

安装

pip install python-docx

使用实例1:读

from docx import Document

def readDocx(fileName):
    doc = Document(fileName)
    # python UnicodeEncodeError: 'gbk' codec can't encode character '\xef' in posi
    outFile = open("a." + fileName + ".txt", "w", encoding='utf-8')
    #for para in doc.paragraphs:
    #    print(para.txt)
    
    # 每一段的编号、内容
    for i in range(len(doc.paragraphs)):
        outFile.write(str(i) + " " + doc.paragraphs[i].text + "\n")
    # 表格
    tbs = doc.tables
    for tb in tbs:
        # 行
        for row in tb.rows:
        # 列
            for cell in row.cells:
                outFile.write(cell.text + "\t")
            outFile.write("\n")
            # 也可以用下面方法
            # text = ''
            # for p in cell.paragraphs:
            #     text += p.text
            # print(text)
            

from docx import Document
from docx.shared import Inches

def createDocx():
    document = Document()
    # 添加标题并设置级别,范围0-9,默认1
    document.add_heading("Title", 0)
    p = document.add_paragraph("a plain paragraph lalalal")
    # 在段落后面追加文本,并设置样式
    # 直接追加哦
    p.add_run("bold").bold = True
    p.add_run(" test ")
    p.add_run("italic.").italic = True
    for i in range(10):
        document.add_heading("heading, level " + str(i) , level=i)
    document.add_paragraph("intense quote", style="Intense Quote")
    # 添加list(原点)
    document.add_paragraph("first item in unordered list", style="List Bullet")
    document.add_paragraph("second item in unordered list", style="List Bullet")
    # 添加带计数的list
    document.add_paragraph('first item in ordered list', style='List Number')
    document.add_paragraph('second item in ordered list', style='List Number')
    # 添加图片
    document.add_picture('test.PNG', width=Inches(1.25))
    records = (
        (3, '101', 'Spam'),
        (7, '422', 'Eggs'),
        (4, '631', 'Spam, spam, eggs, and spam')
    )
    # 添加表格:一行三列
    # 表格样式参数可选:
    # Normal Table
    # Table Grid
    # Light Shading、 Light Shading Accent 1 至 Light Shading Accent 6
    # Light List、Light List Accent 1 至 Light List Accent 6
    # Light Grid、Light Grid Accent 1 至 Light Grid Accent 6
    # 太多了其它省略...
    table = document.add_table(rows=1, cols=3, style='Light Shading Accent 1')
    # 获取第一行的单元格列表
    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().cells
        row_cells[0].text = str(qty)
        row_cells[1].text = id
        row_cells[2].text = desc
    document.add_page_break()
    # 保存.docx文档
    document.save('demo.docx')

docx2txt包

用它是因为python-docx读不到超链接的文字内容。而docx2txt一定能读到所有字符。

def read_docx(fileName):
    text = docx2txt.process(fileName)
    outFile = open("b." + fileName + ".txt", "w", encoding='utf-8')
    outFile.write(text)

你可能感兴趣的:(工作技巧,python,经验分享)