python___docx模块
⼀,docx模块
Python可以利⽤python-docx模块处理word⽂档,处理⽅式是⾯向对象的。也就是说python-docx模块会把word⽂档,⽂档中的段落、⽂本、字体等都看做对象,对对象进⾏处理就是对word⽂档的内容处理。
⼆,相关概念
如果需要读取word⽂档中的⽂字(⼀般来说,程序也只需要认识word⽂档中的⽂字信息),需要先了解python-docx模块的⼏个概念。
1,Document对象,表⽰⼀个word⽂档。
2,Paragraph对象,表⽰word⽂档中的⼀个段落
3,Paragraph对象的text属性,表⽰段落中的⽂本内容。
三,模块的安装和导⼊
需要注意,python-docx模块安装需要在cmd命令⾏中输⼊pip install python-docx,如下图表⽰安装成功
(最后那句英⽂Successfully installed,成功地安装完成)
注意在导⼊模块时,⽤的是import docx。
也真是奇了怪了,怎么安装和导⼊模块时,很多都不⽤⼀个名字,看来是很有必要出⼀个python版本的模块管理程序python-maven了,本段纯属PS。
四,读取word⽂本
在了解了上⾯的信息之后,就很简单了,下⾯先创建⼀个D:\temp\word.docx⽂件,并在其中输⼊如下内容。
#-*- conding:utf-8 -*-
'''
Created on 2018年7⽉14⽇
@author: Administrator
'''
import docx
file=docx.Document(r"F:\python从⼊门到放弃\7\2\wenjian.docx")
print('段落:'+str(len(file.paragraphs)))
#
# for para in file.paragraphs:
# )
for i in range(len(file.paragraphs)):
print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)
1#-*- conding:utf-8 -*-
2'''
3Created on 2018年7⽉14⽇
4
5@author: Administrator
6'''
7import sys
8
9from docx import Document
10from docx.shared import Inches
11
12def main():
13# reload(sys)
13# reload(sys)
14# sys.setdefaultencoding('utf-8')
15
16# 创建⽂档对象
17 document = Document()
18
19# 设置⽂档标题,中⽂要⽤unicode字符串
20 document.add_heading(u'我的⼀个新⽂档',0)
21
22# 往⽂档中添加段落
23 p = document.add_paragraph('This is a paragraph having some ')
24 p.add_run('bold ').bold = True
25 p.add_run('and some ')
26 p.add_run('italic.').italic = True
27
28# 添加⼀级标题
29 document.add_heading(u'⼀级标题, level = 1',level = 1)
30 document.add_paragraph('Intense quote',style = 'IntenseQuote')
31
32# 添加⽆序列表
33 document.add_paragraph('first item in unordered list',style = 'ListBullet') 34
35# 添加有序列表
36 document.add_paragraph('first item in ordered list',style = 'ListNumber')
37 document.add_paragraph('second item in ordered list',style = 'ListNumber')
38 document.add_paragraph('third item in ordered list',style = 'ListNumber') 39
40# 添加图⽚,并指定宽度
41 document.add_picture('cat.png',width = Inches(2.25))
42
43# 添加表格: 1⾏3列
44 table = document.add_table(rows = 1,cols = 3)
45# 获取第⼀⾏的单元格列表对象
46 hdr_cells = ws[0].cells
47# 为每⼀个单元格赋值
48# 注:值都要为字符串类型
49 hdr_cells[0].text = 'Name'
50 hdr_cells[1].text = 'Age'
51 hdr_cells[2].text = 'Tel'
52# 为表格添加⼀⾏
53 new_cells = table.add_row().cells
54 new_cells[0].text = 'Tom'
55 new_cells[1].text = '19'
python怎么读取py文件56 new_cells[2].text = '12345678'
57
58# 添加分页符
59 document.add_page_break()
60
61# 往新的⼀页中添加段落
62 p = document.add_paragraph('This is a paragraph in new page.')
63
64# 保存⽂档
65 document.save('demo1.doc')
66
67if__name__ == '__main__':
68 main()
读取表格:
#-*- conding:utf-8 -*-
'''
Created on 2018年7⽉14⽇
@author: Administrator
'''
import docx
doc = docx.Document('wenjian.docx')
for table in doc.tables: # 遍历所有表格
print('----table------')
for row ws: # 遍历表格的所有⾏
# row_str = '\t'.join([ for cell lls]) # ⼀⾏数据
# print row_str
for cell lls:
, '\t',)
print() #换⾏
⾸先是⽤docx.Document打开对应的⽂件⽬录。docx⽂件的结构⽐较复杂,分为三层,1、Docment对象表⽰整个⽂档;2、Docment 包含了Paragraph对象的列表,Paragraph对象⽤来表⽰⽂档中的段落;3、⼀个Paragraph对象包含Run对象的列表。 因此p.text会打印出整个的⽂本⽂档。⽽⽤doc.tables来遍历所有的表格。并且对每个表格通过遍历⾏,列的⽅式来得到所有的内容。
但是在运⾏结果中并没有到我们插⼊的⽂件对象和图⽚,⽂档。这部分该如何解析呢。⾸先我们需要先来认识下docx⽂档的格式组成:
docx是Microsoft Office2007之后版本使⽤的,⽤新的基于XML的压缩⽂件格式取代了其⽬前专有的默认⽂件格式,在传统的⽂件名扩展名后⾯添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。
docx格式的⽂件本质上是⼀个ZIP⽂件。将⼀个docx⽂件的后缀改为ZIP后是可以⽤打开或是解压的。事实上,Word2007的基本⽂件就是ZIP格式的,他可以算作是docx⽂件的容器。
docx 格式⽂件的主要内容是保存为XML格式的,但⽂件并⾮直接保存于磁盘。它是保存在⼀个ZIP⽂件中,然后取扩展名为docx。
将.docx 格式的⽂件后缀改为ZIP后解压, 可以看到解压出来的⽂件夹中有word这样⼀个⽂件夹,它包含了Word⽂档的⼤部分内容。⽽其中的l⽂件则包含了⽂档的主要⽂本内容
从上⾯的⽂档我们可以了解到docx⽂档实际上是由XML⽂档打包组成的。那么我们要得到其中所有的部分,可以⽤ZIP解压的⽅式来得到所有的部件。我们先试下看是否可以
1 将docx⽂档改成ZIP的后缀
2 解压⽂件
解压之后得到如下⼏个⽂件
点开word⽂件夹:有如下的⽂件夹。l就是描述⽂本对象的⽂件
其中embeddings⽂件中就是我们插⼊的⽂本对象 是⼀个bin⽂件
Media⽂件中就是存储的图⽚:
我们通过⼿动的⽅式将插⼊的⽂本以及图⽚解析出来,那么通过代码也是同样可以解析的。代码如下。
os.chdir(r'E:\py_prj') #⾸先改变⽬录到⽂件的⽬录
f=zipfile.ZipFile('test.zip','r') #进⾏解压
for file in f.namelist():
file=open(r'E:\py_prj\word\embeddings\oleObject1.bin','rb').read() #进⼊⽂件路径,读取⼆进制⽂件。
for f in file:
print f
通过上⾯的⽅式,就可以将docx中插⼊的⽂件以及图⽚全部解析出来。具体docx的写的⽅式可以参考官⽅⽂档的介绍
python docx 中⽂字体设置
解决办法:
⾸先创建⼀个⽂档,要先声明⼀个document:
from docx import Document
document = Document()
docx内置的样式都可以通过document.styles取到。
正⽂是Normal, 标题样式根据标题声明的基本,分别从Heading 1 到Heading 9, 另外还有table、list等各种word对应的样式。可以通过遍历document.styles查看。
我们以正⽂Normal为例。先来看看涉及字体更改的是style object⾥⾯的哪些属性。
document.styles[‘Normal’].font.name
有兴趣深⼊研究的同学可以看看官⽅⽂档对Font的介绍。 在这⾥我们只需要更改font.name。
document.styles[‘Normal’]._element.rPr.rFonts
只更改font.name是不够的,还需要调⽤._element.rPr.rFonts的set()⽅法。综合起来这样
l.ns import qn
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
问题解决, 表格中字体成功更改为”宋体”.
转载于:wwwblogs/Mengchangxin/p/9310024.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论