import fnmatch, os, sys, win32com.client
readpath=r'D:\123'
wordapp = win32com.client.gencache.EnsureDispatch("Word.Application")
try:
for path, dirs, files in os.walk(readpath):
for filename in files:
if not fnmatch.fnmatch(filename, '*.docx'):continue
doc = os.path.abspath(os.path.join(path,filename))
print 'processing %s...' % doc
wordapp.Documents.Open(doc)
docastext = doc[:-4] + 'txt'
wordapp.ActiveDocument.SaveAs(docastext,FileFormat=win32com.client.constants.wdFormatText)
wordapp.ActiveDocument.Close()
finally:
wordapp.Quit()
print 'end'
f=open(r'd:\123\test.txt','r')
for line in f.readlines():
print line.decode('gbk')
f.close()
能否直接读取word文档内容吗?
我在其他地方也看到了先将word保存为txt再读取,为何要这样操作那?
因为word并不是纯文本(不存在一行一行的概念),尽管你可能只输入了文本,但不能认为它就是文本
python如何读取word文件
>>>defPrintAllParagraphs(doc):count=doc.Paragraphs.Count
foriinrange(count-1,-1,-1):
pr=doc.Paragraphs[i].Range
printpr.Text
>>>app=my.Office.Word.GetInstance()
>>>doc=app.Documents[0]
>>>PrintAllParagraphs(doc)
1.什么是域
域应用基础
>>>
@staticmethoddefGetInstance():
u'''获取Word应用程序的Application对象'''
importwin32com.client
returnwin32com.client.Dispatch('Word.Application')
my.Office.Word.GetInstance的方法实现如上,是一个使用win32com操纵Word Com的接口的封装
所有Paragraph即段落对象,都是通过Paragraph.Range.Text来访问它的文字的
如何用python读取word
使用Python的内部方法open()读取文本文件
try:f=open('/file','r')
print(f.read())
finally:
iff:
f.close()
如果读取word文档推荐使用第三方插件,python-docx 可以在官网上下载
使用方式
#-*-coding:cp936-*-importdocx
document=docx.Document(文件路径)
docText='\n\n'.join([
paragraph.text.encode('utf-8')forparagraphindocument.paragraphs
])
printdocText
python输出word内容
程序导出word文档的方法
将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freemarker这样的模板引擎这样的方式。php中也有一些相应的方法,但在python中将web/html内容生成world文档的方法是很少的。其中最不好解决的就是如何将使用js代码异步获取填充的数据,图片导出到word文档中。
1. unoconv
功能:
1.支持将本地html文档转换为docx格式的文档,所以需要先将网页中的html文件保存到本地,再调用unoconv进行转换。转换效果也不错,使用方法非常简单。
\# 安装
sudo apt-get install unoconv
\# 使用
unoconv -f pdf *.odt
unoconv -f doc *.odt
unoconv -f html *.odt
缺点:
1.只能对静态html进行转换,对于页面中有使用ajax异步获取数据的地方也不能转换(主要是要保证从web页面保存下来的html文件中有数据)。
2.只能对html进行转换,如果页面中有使用echarts,highcharts等js代码生成的图片,是无法将这些图片转换到word文档中;
3.生成的word文档内容格式不容易控制。
2. python-docx
功能:
1.python-docx是一个可以读写word文档的python库。
使用方法:
1.获取网页中的数据,使用python手动排版添加到word文档中。
from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first item in ordered list', style='ListNumber'
)
document.add_picture('monty-truth.png', width=Inches(1.25))
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
row_cells = table.add_row().cells
row_cells[0].text = str(item.qty)
row_cells[1].text = str(item.id)
row_cells[2].text = item.desc
document.add_page_break()
document.save('demo.docx')
from docx import Document
from docx.shared import Inches
document = Document()
for row in range(9):
t = document.add_table(rows=1,cols=1,style = 'Table Grid')
t.autofit = False #很重要!
w = float(row) / 2.0
t.columns[0].width = Inches(w)
document.save('table-step.docx')
缺点:
1.功能非常弱。有很多限制比如不支持模板等,只能生成简单格式的word文档。
程序导出PDF文档方法
1.pdfkit
功能:
1.wkhtmltopdf主要用于HTML生成PDF。
2.pdfkit是基于wkhtmltopdf的python封装,支持URL,本地文件,文本内容到PDF的转换,其最终还是调用wkhtmltopdf命令。是目前接触到的python生成pdf效果较好的。
优点:
1.wkhtmltopdf:利用webkit内核将HTML转为PDF
webkit是一个高效、开源的浏览器内核,包括Chrome和Safari在内的浏览器都使用了这个内核。Chrome打印当前网页的功能,其中有一个选项就是直接“保存为 PDF”。
2.wkhtmltopdf使用webkit内核的PDF渲染引擎来将HTML页面转换为PDF。高保真,转换质量很好,且使用非常简单。
使用方法:
\# 安装
pip install pdfkit
\# 使用
import pdfkit
pdfkit.from_url('', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
缺点:
1.对使用echarts,highcharts这样的js代码生成的图标无法转换为pdf(因为它的功能主要是将html转换为pdf,而不是将js转换为pdf)。对于纯静态页面的转换效果还是不错的。
2.其他
其他生成pdf的插件还有:weasyprint,reportlab,PyPDF2等,经简单试验都不如pdfkit效果好,且有些用法复杂。
如何在 Linux 上使用 Python 读取 word 文件信息
必须说明:不同于Illustrator、InDesign、CorelDRAW、OpenOffice DRAW、Incscape等工具,Word是流动分页的,文件内容本身并不存储分页结果。具体分页时断在哪里、最后分出多少页,都需要现场渲染所有的图文内容之后才能确定。
(简而言之就是:Word文件中仅包含了一行一行的文本,与页面设置中指定的页面尺寸。Word每次打开文件时都会一行一行“摆放”文本数据,发现一页装不下了自动新开一页。当然真正的Word渲染引擎肯定有更复杂的行为。)
从.doc/.docx文件中直接读出页面数量,这本身就是个伪命题。所以千万别在“直接读取页面数量”这个方向上寻求方案——软件开发的技法不好可以改正,但路线错了必死无疑!
你需要调动一套能够真的把Word文件的内容渲染出来的工具(支持二次开发的)。只有把Word文件的所有内容渲染成为可以观看的图形,才能准确得知页面的总数。在Linux上很可能LibreOffice可以吧。而在Windows上就当然是用Word本身了。
注意Word的分页结论是没有保证的。缺少字体、字形不同、软件环境不同等各种原因,都会造成不同电脑上打开同一个Word文件的页数不一致。这一点对服务器也没有例外。得到了页数也只能参考使用,而不要100%信赖。
如何在 Linux 上使用 Python 读取 word 文件信息
第一步:获取doc文件的xml组成文件
import zipfiledef get_word_xml(docx_filename):
with open(docx_filename) as f:
zip = zipfile.ZipFile(f)
xml_content = zip.read('word/document.xml')
return xml_content
第二步:解析xml为树形数据结构
from lxml import etreedef get_xml_tree(xml_string):
return etree.fromstring(xml_string)
第三步:读取word内容:
def _itertext(self, my_etree):
"""Iterator to go through xml tree's text nodes"""
for node in my_etree.iter(tag=etree.Element):
if self._check_element_is(node, 't'):
yield (node, node.text)def _check_element_is(self, element, type_char):
word_schema = '99999'
return element.tag == '{%s}%s' % (word_schema,type_char)
如何在 Linux 上使用 Python 读取 word 文件信息
必须说明:不同于Illustrator、InDesign、CorelDRAW、OpenOffice DRAW、Incscape等工具,Word是流动分页的,文件内容本身并不存储分页结果。具体分页时断在哪里、最后分出多少页,都需要现场渲染所有的图文内容之后才能确定。
(简而言之就是:Word文件中仅包含了一行一行的文本,与页面设置中指定的页面尺寸。Word每次打开文件时都会一行一行“摆放”文本数据,发现一页装不下了自动新开一页。当然真正的Word渲染引擎肯定有更复杂的行为。)
从.doc/.docx文件中直接读出页面数量,这本身就是个伪命题。所以千万别在“直接读取页面数量”这个方向上寻求方案——软件开发的技法不好可以改正,但路线错了必死无疑!
你需要调动一套能够真的把Word文件的内容渲染出来的工具(支持二次开发的)。只有把Word文件的所有内容渲染成为可以观看的图形,才能准确得知页面的总数。在Linux上很可能LibreOffice可以吧。而在Windows上就当然是用Word本身了。
注意Word的分页结论是没有保证的。缺少字体、字形不同、软件环境不同等各种原因,都会造成不同电脑上打开同一个Word文件的页数不一致。这一点对服务器也没有例外。得到了页数也只能参考使用,而不要100%信赖。
python如何获取word文件中某个关键字之后的表格
最好是全部都读取到程序中,在程序中进行判断。
本文实例讲述了Python实现批量读取word中表格信息的方法。分享给大家供大家参考。具体如下:
单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个python小程序把所需的信息打印出来
#coding:utf-8
import os
import win32com
from win32com.client import Dispatch, constants
from docx import Document
def parse_doc(f):
"""读取doc,返回姓名和行业
"""
doc = w.Documents.Open( FileName = f )
t = doc.Tables[0] # 根据文件中的图表选择信息
name = t.Rows[0].Cells[1].Range.Text
situation = t.Rows[0].Cells[5].Range.Text
people = t.Rows[1].Cells[1].Range.Text
title = t.Rows[1].Cells[3].Range.Text
print name, situation, people,title
doc.Close()
def parse_docx(f):
"""读取docx,返回姓名和行业
"""
d = Document(f)
t = d.tables[0]
name = t.cell(0,1).text
situation = t.cell(0,8).text
people = t.cell(1,2).text
title = t.cell(1,8).text
print name, situation, people,title
if __name__ == "__main__":
w = win32com.client.Dispatch('Word.Application')
# 遍历文件
PATH = "H:\work\\aaa" # windows文件路径
doc_files = os.listdir(PATH)
for doc in doc_files:
if os.path.splitext(doc)[1] == '.docx':
try:
parse_docx(PATH+'\\'+doc)
except Exception as e:
print e
elif os.path.splitext(doc)[1] == '.doc':
try:
parse_doc(PATH+'\\'+doc)
except Exception as e:
print e
希望本文所述对大家的Python程序设计有所帮助。
转载请注明出处51数据库 » python读取word内容 python读取word文档内容