python进⾏Word解析
python进⾏Word的解析
⽂章⽬录
预备知识
os库的使⽤
os库是访问操作系统相关内容的模块,在进⾏word解析的过程中,由于要对⽂件进⾏相应的操作,不免要调⽤os中的⽂件操作的函数,这⾥介绍⼀些常⽤的os操作⽂件内容
import os
# ---------- ⽬录相关操作 ------------- #
os.chdir("dirname")#改变当前脚本⼯作⽬录;相当于shell下cd
os.curdir #返回当前⽬录: ('.')
os.pardir #获取当前⽬录的⽗⽬录字符串名:('..')
os.makedirs('dir1/dir2')#可⽣成多层递归⽬录
os.mkdir('dirname')#⽣成单级⽬录
os.listdir('dirname')#列出指定⽬录下的所有⽂件和⼦⽬录,包括隐藏⽂件
# ---------- ⽂件简单操作 ------------- #
os.stat('path/filename')#获取⽂件/⽬录信息
# ------------- os.path相关操作 ------------ #
os.path.abspath(path)#返回path规范化的绝对路径
os.path.split(path)#将path分割成⽬录和⽂件名⼆元组返回
os.path.dirname(path)#返回path的⽬录。其实就是os.path.split(path)的第⼀个元素
os.path.basename(path)#返回path最后的⽂件名。如果path以/或\结尾,那么就会返回空值。
ists(path或者file)#如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)#如果path是绝对路径,返回True
os.path.isfile(path)#如果path是⼀个存在的⽂件,返回True。否则返回False
os.path.isdir(path)#如果path是⼀个存在的⽬录,则返回True。否则返回False
os.path.join(path1[, path2[,...]])#将多个路径组合后返回,第⼀个绝对路径之前的参数将被忽略
atime(path)#返回path所指向的⽂件或者⽬录的最后存取时间
ime(path)#返回path所指向的⽂件或者⽬录的最后修改时间
size(filename)#返回⽂件包含的字符数量
实际操作os库的例⼦
# ------------- 举个使⽤的例⼦ -------------
# os模块的学习
import os, time
# 1:获取当前的路径和路径下的所有的⽂件
# 获取当前的路径:os.getcwd() -> str
get_path = os.getcwd()
print("当前的路径是: {}".format(get_path))
# 某个路径下的所有的⽂件是:os.listdir(str: path) -> list
get_dir = os.listdir(get_path)
for dir_name in get_dir:
print("⽂件有:{}".format(dir_name))# 获取的是⼀级⼦⽬录,就是你打开,能看见啥就是啥# 2:绝对路径os.path.abspath(path) -> str: abs_path
get_abs_path = os.path.abspath('.')
print('当前路径的绝对路径是:{}'.format(get_abs_path))
get_abs_path = os.path.abspath('..')
print('当前路径的绝对路径是:{}'.format(get_abs_path))
# 路径的分割path.split和聚合path.join
# 路径和⽂件名称分割os.path.split(path) -> tuple(path, filename)
# 可能存在只有路径或者⽂件名称的时候,这个主要取决传⼊的path的参数
get1 = os.path.split(get_path)
print(get1)
# 有分割就必然有聚合,使⽤os.path.join()
# os.path.join(path1,path2,...):将path进⾏组合,若其中有绝对路径,则之前的path将被删除new_path = os.path.join("D:\Code\Python","hello.py")
print(new_path)
# 返回路径中的⽂件夹部分和⽂件名称的部分
# ⽂件夹的部分是path.dirname(path), ⽂件名称的部分是path.basename(path)
get_dir_name = os.path.dirname(new_path)
get_base_name = os.path.basename(new_path)
print("⽂件夹的部分是:{}".format(get_dir_name))
print("⽂件名的部分是:{}".format(get_base_name))
# ⽂件的三种时间
# getmtime(path)最后修改时间
# getatime(path)最后访问时间
# getctime(path)创建的时间
print("⽂件的最后修改时间是:{}".format(time.localtime(ime(get_path))))
print("⽂件的最后访问时间是:{}".format(time.localtime(atime(get_path))))
print("⽂件的创建时间是:{}".format(time.localtime(ime(get_path))))
# ⽂件的⼤⼩:如果是⽂件夹将返回0
def getSize(get_path):
get_size = size(get_path)
if get_size ==0:
print("This is a dir")
else:
print("{}'s size is : {}".format(get_path, get_size))
get_path1 = get_path +'/'
get_path2 = r"D:\Code\Python\more\数据分析\LoadAndSave\use1.py"
getSize(get_path1)
getSize(get_path2)
# 实际操作:查最新的⽂件
def new_file(test_dir):
lists=os.listdir(test_dir)
# 按⽂件修改时间⼤⼩从⼩到⼤排序。
lists.sort(key=lambda fn:ime(test_dir+'\\'+fn))
file_path=os.path.join(test_dir,lists[-1])
return file_path
docx库的使⽤
word的XML的了解
<!-- Office2003以上,Word可以以XML⽂本格式存储,这样就可以使⽤外部程序创建Word⽂件,⽽不需要使⽤Word的对象。也能够⾃由的打开分析Word⽂件,或者发布到⾃⼰的Web页⾯,或者其他更多应⽤。-->
<!-- -------- ⼀个常规的word的XML结构如下 ---------------------- -->
<?xml version="1.0"?><!-- 版本声明 -->
<!-- 命名空间的指明 -->
<document w="schemas.microsoft/office/word/2003/wordml">
<body><!-- ⽂档部分 -->
<p><!-- 段落部分 -->
<r><!-- 样式串 -->
<t>Hello, World.</t><!-- ⽂本的真正的内容 -->
</r>
</p>
<tb1><!-- 表格部分 -->
...
</tb1>
</body>
</document>
1:怎样从⼀个docx中获取他的xml呢?
1:使⽤winRAR将word⽂件打开
2:然后在对应的word⽂件夹下就可以到l⽂件,在浏览器中打开就可以看到当前的⽂档对应的xml结构了
依靠python写word
写word⼀共就两⼤类操作,⼀个是基本的内容,另⼀个对内容的渲染
word基本操作
from docx import Document //导⼊⽂档库
# 1:打开docx⽂件:Document()
document = Document()
# 2:添加内容
# 添加标题: add_heading(text, level = ?)
document.add_heading(u'标题', level=1)# 定义标题
# 添加⽂本: add_paragraph(text)
document.add_paragraph("这是要进⾏插⼊⼀个⾃然段,没有任何的修饰")
# 添加分块
p1=document.add_paragraph()
run1 = p1.add_run("关于下达%s产品的通知"%today)
run2 = p1.add_run("这⼜是⼀个run")
# 添加分页:add_page_break()
document.add_page_break()
# 添加图⽚:add_picture()
document.add_picture('jdb.jpg',width=Inches(1.25))
# 添加表格:add_table()
table = document.add_table(rows=3,cols=3)#创建⼀个3 * 3的表格
hdr_ws[0].cells # 获取到第⼀⾏的三个单元格
hdr_cells[0].text="第⼀列"# 添加内容
hdr_cells[1].text="第⼆列"
hdr_cells[2].text="第三列"
# 扩充式添加⾏或者列add_row()
table = document.add_table(rows=1, cols=3)# 创建⼀个⼀⾏三列的表格,也就是只有表头hdr_cells = ws[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
# 3:保存⽂价
document.save(filename ="xxx.docx")
加深⼀下run的概念
word渲染操作
# ----------------- 常⽤的渲染库 -----------------
from docx.shared import Inches # 图像的⼤⼩和缩进
from docx.shared import Pt # 设置像素
from docx.shared import RGBColor # 颜⾊
from docx.shared import Length # ⼤⼩
um.text import WD_PARAGRAPH_ALIGNMENT # 段落间的对齐的⽅式
um.text import WD_TAB_ALIGNMENT # 制表符相关
um.text import WD_TAB_LEADER
python处理xml文件l.ns import qn # 要进⾏中⽂设置的时候使⽤
# ----------------- 对段落块中的字体的常见的渲染 ---------------------- #
# 下⾯是对⽂档中的所有的块都进⾏操作, 当然也可以进⾏部分的操作,指明是那个run
run.font.bold =True#⿊体
run.font.italic =True#斜体
run.font.underline =True#下划线
run.font.strike =True#删除线
run.font.shadow =True#阴影
run.font.size = Pt(15)#字体⼤⼩
b = RGBColor(255,255,0)#颜⾊
run.font.name ="微软雅⿊"#字体
r = run._element.rPr.rFonts #中⽂字体,指明这个的时候要⽤到l.ns import qn r.set(qn('w:eastAsia'),"微软雅⿊")
# 单独设置
paragraph.add_run(u'粗体').bold =True
paragraph.add_run(u'斜体').italic =True
paragraph.add_run(u'设置字号').font.size=Pt(24)
# ---------------------- ⽂本对齐⽅式 / 间距的设置 -----------------
# ⽂本居中alignment
paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 左缩进
paragraph_format.left_indent = Inches(0.3)
# ⾏⾸缩进
paragraph_format.first_line_indent = Inches(0.3)
# 上间距和下间距
paragraph_format.space_before = Pt(18)
paragraph_format.space_after = Pt(12)
# --------------------- 字段设置:引⽤ / 列表 ------------------------
# 字段设置:都是在添加字段add_paragraph--->style时进⾏设置
# 添加引⽤ style = 'Intense Quote'
document.add_paragraph('Intense quote', style='Intense Quote')
# 有序列表[List Number] 和⽆序列表[List Bullet]
document.add_paragraph(
u'有序列表元素1',style='List Number'
)
document.add_paragraph(
u'有序列表元素2',style='List Number'
)
document.add_paragraph(
u'⽆序列表元素1',style='List Bullet'
)
document.add_paragraph(
u'⽆序列表元素2',style='List Bullet'
)
# --------------- 表格的整合设置merge() ----------------
table_ll(0,0).paragraphs[0].add_run('XXX')# 合并单位格内填⼊XX内容
⼀个完整的测试⽤例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论