-
2021-01-14 14:59:11
import os, time, fnmatch
from docx import Document
class search:
def __init__(self, path, search_string, file_filter):
self.search_path = path
self.search_string = search_string
self.file_filter = file_filter
print ("Search %s in %s..." % (
self.search_string, self.search_path
) )
print ("_" * 80)
time_begin = time.time()
file_count = self.walk()
print ("_" * 80)
print ("%s files searched in %0.2fsec." % (
file_count, (time.time() - time_begin)
))
#遍历所有的文件,记录文件数量
def walk(self):
file_count = 0
for root, dirlist, filelist in os.walk(self.search_path, followlinks=True):
for filename in filelist:
for file_filter in self.file_filter:
if fnmatch.fnmatch(filename, file_filter):
self.search_file(os.path.join(root, filename))
file_count += 1
return file_count
#遍历文件中的字符串,并且剪切显示出来
def search_file(self, filepath):
d = Document(filepath)
for para in d.paragraphs:
if self.search_string in d.paragraphs:
print(filepath)
self.cutout_content(content)
#剪切字符串并且显示
def cutout_content(self, content):
current_pos = 0
search_string_len = len(self.search_string)
for i in xrange(max_cutouts):
try:
#从current_pos位置往后寻找self.search_string个字符串
pos = content.index(self.search_string, current_pos)
except ValueError:
break
#将显示窗口定义为寻找到的关键字向前向后各content_extract个字符
content_window = content[ pos - content_extract : pos + content_extract ]
print (">>>", content_window.encode("String_Escape"))
current_pos += pos + search_string_len
print
#主程序入口
if __name__ == "__main__":
search_path = r"c:\Users\Administrator\Desktop"
file_filter = ("*.docx",".doc") # fnmatch-Filter
search_string = "history"
content_extract = 35 #获取摘要35
max_cutouts = 20 #显示窗口20
search(search_path, search_string, file_filter)
更多相关内容 -
python读取xml文件.doc
2021-11-25 21:52:51python读取xml文件.doc -
python读写 doc文件和docx文件
2022-04-20 11:39:44Python 中可以读取 word 文件的库有 python-docx 和 pywin32。 优点缺点python-docx跨平台只能处理 .docx 格式,不能处理.doc格式pywin32仅限 windows 平台.doc 和 .docx 都能处理。 一. pywin32模块 这个库很...背景:
Python 中可以读取 word 文件的库有 python-docx 和 pywin32。
优点缺点python-docx跨平台只能处理 .docx 格式,不能处理.doc格式pywin32仅限 windows 平台.doc 和 .docx 都能处理。
一. pywin32模块
这个库很强大,不仅仅可以读取 word,但是网上介绍用 pywin32 读取 .doc 的文章真不多,因为,真心不好用。
以下是 pywin32 读取 .doc 的代码示例,但是读取表格有问题,输出全是空,原因不明,因为不打算用所以没有深入研究。另外,如果表格中有纵向合并单元格,会报错:“无法访问此集合中单独的行,因为表格有纵向合并的单元格。”
1.将doc转为docx
python3.8中win32com 要安装pypiwin32
pip install pypiwin32
from win32com import client as wc word = wc.Dispatch("Word.Application") doc = word.Documents.Open(路径+名称.doc) doc.SaveAs(路径+名称.docx, 12) 12为docx doc.Close() word.Quit()
2.读取段落
import docx docStr = Document(docName) 打开文档 for paragraph in docStr.paragraphs: parStr = paragraph.text --》paragraph.style.name == 'Heading 1' 一级标题 --》paragraph.paragraph_format.alignment == 1 居中显示 --》paragraph.style.next_paragraph_style.paragraph_format.alignment == 1 下一段居中显示 --》paragraph.style.font.color
3.读取表格
numTables = docStr.tables for table in numTables: #行列个数 row_count = len(table.rows) col_count = len(table.columns) for i in range(row_count): row = table.rows[i].cells i行j列内容:row[j].text 或者: row_count = len(table.rows) col_count = len(table.columns) for i in range(row_count): for j in range(col_count): print(table.cell(i,j).text)
4.按样式读取
读取标题
for p in doc.paragraphs: if p.style.name=='Heading 1': print(p.text)
import re for p in doc.paragraphs: if re.match("^Heading \d+$",p.style.name): print(p.text)
读取正文
for p in doc.paragraphs: if p.style.name=='Normal': print(p.text)
获取docx支持的样式
from docx.enum.style import WD_STYLE_TYPE for i in s: if i.type==WD_STYLE_TYPE.PARAGRAPH: print(i.name)
5.获取文字格式信息
paragraph 对象 里还有更小的 run 对象,run 对象才包含了段落对象的文字信息。
paragraph.text 方法也是通过 run 对象的方法获取到文字信息的:paragraph.text 方法源码: def text(self): text = '' for run in self.runs: text += run.text return text
文字的字体、大小、下划线等信息都包含在 run 对象中(不清楚的看前面的博客):
获取段落的 run 对象列表 runs = par0.runs print(runs) 获取 run 对象 run_0 = runs[0] print(run_0.text) # 获取 run 对象文字信息 打印结果: 坚持因地制宜,差异化打造特色小镇, 文档 段落 和 run 对象示意:
获取文字格式信息: # 获取文字格式信息 print('字体名称:',run_0.font.name) # 字体名称: 宋体 print('字体大小:',run_0.font.size) # 字体大小: 152400 print('是否加粗:',run_0.font.bold) # 是否加粗: None print('是否斜体:',run_0.font.italic) # 是否斜体: True print('字体颜色:',run_0.font.color.rgb) # 字体颜色: FF0000 print('字体高亮:',run_0.font.highlight_color) # 字体高亮: YELLOW (7) print('下划线:',run_0.font.underline) # 下划线: True print('删除线:',run_0.font.strike) # 删除线: None print('双删除线:',run_0.font.double_strike) # 双删除线: None print('下标:',run_0.font.subscript) # 下标: None print('上标:',run_0.font.superscript) # 上标: None LIK2
6.设置首行缩进
from docx.shared import Inches,Pt par2 = doc.add_paragraph('段落文本') # 左缩进,0.5 英寸 par2.paragraph_format.left_indent = Inches(0.5) # 右缩进,20 磅 par2.paragraph_format.right_indent = Pt(20) # 首行缩进 par2.paragraph_format.first_line_indent = Inches(1)
查看首行缩进单位
from docx import Document from docx.shared import Inches from docx.oxml.ns import qn from docx.shared import Cm, Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.shared import RGBColor myDocument = Document('2020年建交集团3月分析报告.docx') for paragraph in myDocument.paragraphs: print(paragraph.paragraph_format.first_line_indent) print(dir(paragraph))
批量的读取doc文档】
解决方案:利用python将大批.doc文件转化为.docx文件,再读写.docx文件
问题分析:python利用python-docx (0.8.6)库可以读取.docx文件或.txt文件,且一路畅通无阻,而对.doc文件本身python是无能为力的,那有很多同学就不服气,我手动把.doc文件的后缀名改为.docx或.txt不就解决问题了吗?答案是不能的,简单修改后缀名,那么文件就被你玩坏了,别说打不开,就是打开也是天书啊(乱码)。python无法操作.doc文件是他的先天不足,但是我们不要钻牛角尖一定要在互联网上找到一种源码直接读取.doc文件,一调用就好了,但是不幸的是,你可能在网上也找不到解决方案。正当我一筹莫展之时,我将.doc文档利用手动的方式“另存为”.docx文档,就能够成功打开转化后的.docx文档,于是我就尝试利用代码方式完成这个手动的“另存为”功能,问题得以解决。
直接上python代码(首先你需要先安装pypewin32库):
# -*- coding: utf-8 -*-: import sys import pickle import re import codecs import string import shutil from win32com import client as wc
def doSaveAas(): # 想批处理文件,你就用for循环呗,我一次性处理了100多个文件,代码执行不超过2分钟,可以解决问题,目标文件路径可以自由改动,大家注意SaveAs方法中的参数,好多啊,别写错了
word = wc.Dispatch('Word.Application') doc = word.Documents.Open(u'C:\\Users\\X\\PycharmProjects\\1\\大家好.doc') # 目标路径下的文件 doc.SaveAs(u'C:\\Users\\X\\PycharmProjects\\1\\我是一枚小小的程序员X007.docx', 12, False, "", True, "", False, False, False, False) # 转化后路径下的文件 doc.Close() word.Quit()
参考摘取原文:https://www.sohu.com/a/281740874_99987664(感谢大佬)
https://www.cnblogs.com/zhaobowen/p/13807092.html(感谢大佬)
https://www.jb51.net/article/139671.htm(感谢大佬)
-
Python3 读取Word文件方式
2020-09-17 23:28:48今天小编就为大家分享一篇Python3 读取Word文件方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
【Python】python读取doc、docx文件里的表格内容并存入excel中
2021-03-16 23:40:32先展示下基本的效果,首先我们只有一个doc文件,与python的代码: 我这里用的是doc的word文档,文档内表格如下: 通过python读取后打印: 我这里没有专门按照表格内往excel中写,只是随意写了几个数据: 因为根据...效果
先展示下基本的效果,首先我们只有一个doc文件,与python的代码:
我这里用的是doc的word文档,文档内表格如下:
通过python读取后打印:
我这里没有专门按照表格内往excel中写,只是随意写了几个数据:
因为根据需要不同,要写的内容也不同,不过方法是差不多的,就是在读取word时把需要的数据存储下来,在写入表格中的时候填入即可。程序运行完之后会生产docx文件与xlsx文件:
代码部分:
首先要先安装相关的模块:
使用docx文件需要加载:pip install python-docx
使用doc文件需要加载:
pip install pywin32
使用xlsx文件需要加载:
pip install openpyxl
加载模块出现问题,或者超时之类可以参考我这篇文章:更换pip源等
接下来是代码部分,注释也都齐全:
# -*- coding:utf-8 -*- import os import docx from docx import Document #导入库 from win32com.client import Dispatch ''' 获取绝对地址, 如果是doc的转换为docx。 ''' #文件相对路径 file_path = "../TEST.doc" file_name, file_extension = os.path.splitext(file_path)#获取文件名、文件扩展名 file_abs_path = os.path.abspath(file_path) #通过相对路径获取绝对路径 if file_extension in [".doc"]: #打开word应用程序 wd=Dispatch("Word.application") #后台运行 wd.Visible = 0 wd.DisplayAlerts = 0 #打开doc文档,必须给一个绝对路径 doc=wd.Documents.Open(file_abs_path) #另存为docx doc.SaveAs(file_abs_path+r"x",12)#12表示docx格式 #关闭文档 doc.Close() #退出word应用 wd.Quit() file_abs_path = file_abs_path+r"x"#更新路径为docx的路径 ''' 读取word的表格内的数据,并按行打印。 ''' word = Document(file_abs_path) #读入文件 tables=word.tables for i in range(len(tables)): tb=tables[i] #获取表格的行 tb_rows=tb.rows #读取每一行内容 for i in range(len(tb_rows)): row_data=[] row_cells=tb_rows[i].cells #读取每一行单元格内容 for cell in row_cells: row_data.append(cell.text)#单元格内容 print(row_data) #打印整行数据 ''' 往excel中填写数据,在读取word时把需要的数据存储下来, 在写入表格中的时候填入即可。 ''' # 导入模块 from openpyxl import Workbook from openpyxl import workbook from openpyxl import load_workbook #新建excel wb = Workbook() # 实例化 ws = wb.active # 激活 worksheet ###打开已有excel表格 ##wb = load_workbook('../TEST.xlsx') ##ws = wb["Sheet1"] for i in range(1,8,1): ws.cell(row=i, column=i, value=10)#row:行 column:列 value:内容 wb.save('../TEST.xlsx') print('写入完成!')
需要整个工程的话可以加我公众号来获取:
关注公众号:逸趣汇
微信号:yiquhui666
发送:010703 获取下载链接。 -
基于Python获取docx/doc文件内容代码解析
2020-09-17 22:23:23主要介绍了基于Python获取docx/doc文件内容代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
python 后缀doc文件的读取
2021-02-03 07:10:13文件内容如图:from win32com import client as wcfrom docx import Documentdef word_convert():account_list = []new_file_name = ‘C:/名单2.docx‘file_exists = os.path.exists(new_file_name)if not file_...文件内容如图:
from win32com import client as wc
from docx import Document
def word_convert():
account_list = []
new_file_name = ‘C:/名单2.docx‘
file_exists = os.path.exists(new_file_name)
if not file_exists:
word = wc.Dispatch(‘Word.Application‘)
doc = word.Documents.Open(‘C:/名单.doc‘)
doc.SaveAs(‘C:/名单2.docx‘, 12, False, "", True, "", False, False, False,False) # 转化后路径下的文件
doc.Close()
word.Quit()
document = Document(new_file_name)
tables = document.tables
for table in tables:
# 行列个数
row_count = len(table.rows)
col_count = len(table.columns)
for i in range(row_count):
row = table.rows[i].cells
if i == 0:
continue
for j in range(col_count):
value_text = row[j].text
if j == 1:
account_list.append(value_text) # 我这里获取的是第二列
return account_list
先把 doc 文件转换为 docx 读取
-
【python基础】——python读写doc/docx/txt/xls文件
2018-03-16 15:15:391、读取txt文件 #!/usr/bin/python # python3.6 file = open('E:\\个人文件\\6-desktop\\new.txt','r') for line in file: print(line) 2、读取docx文件的内容 1)Python可以利用python-docx模块处理w... -
如何读取doc/docx文件内容(python)
2022-07-23 15:19:31读取doc的方法则是先将doc转换为docx,需要安装python-mpipinstallpypiwin32。读取docx需要安装pipinstallpython-docx。 -
python实现对doc、txt、xls等文档的读写操作
2022-01-20 10:59:301.python实现对doc文档的读取 2.python实现对txt文档的读取 3.python实现对xls表格的读取 1.python实现对doc文档的读取 #读取docx中的文本代码示例 import docx #获取文档对象 file=docx.Document("path") ... -
(Python技术实战)【Linux/Ubuntu】linux环境下如何读取doc文件(不是docx文
2021-05-15 22:55:340.37/ 运行make命令,进行等待 make 运行make install命令,进行等待 make install 接下来就可以使用antiword对doc文件进行读取 import subprocess word = "1.doc" output = subprocess.check_output(["antiword", ... -
解决python大批量读写.doc文件的问题
2020-12-25 05:54:05大家都知道当我们利用java语言读写.doc文件时,无论是利用流的方式将.doc文件的内容输出到控制台(console),还是将其写到其他文件中,无论你采取何种编码格式(utf-8,gbk等)输出,你看到的内容99%都是乱码。... -
Python读取doc文件中的图片
2019-02-24 15:37:15最近需要搜集整理doc文件中的图片和内容,由于数据量比较大,尝试使用Python进行内容提取。网上找了很多资料,利用Win32com组件应该可以实现,但是其中读取表格和图片的方法比较复杂,弄了半天没搞出来。网上还有一... -
python读取 doc/docx文档(非结构化数据)
2021-01-31 16:03:04使用第三方库python-docx读取文档 python-docx官方文档:https://python-docx.readthedocs.io/en/latest/ 安装:pip install python-docx 导入:import docx 注意:python-docx只能处理word2007以后的版本(.docx) 1.... -
python读取doc/docx文件
2019-06-09 00:40:24仅此记录python读取doc/docx文件的方法,和常用简单的open txt文件完全不同(版本python 3.6 Win10) docx 使用docx包,python为其专用接口,python-docx,使用 pip install python-docx 安装即可,本人第一次... -
linux上用python读取doc文档,python处理doc方法
2021-05-15 22:56:362019独角兽企业重金招聘Python工程师标准>>> 在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档。再使用php执行系统命令调用而已。具体操作如下:1、安装antiword官方站:... -
Python用python-docx读写word文档
2020-11-21 01:24:57备注:doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比doc文件所占用空间更小。docx格式的文件本质上是一个ZIP文件,所以其实也可以把.docx文件... -
用python将doc文件转换成docx文件
2022-01-17 16:30:46用python3将doc文件批量转换成docx文件 -
python怎么读取excel文件-Python读写Excel文件方法介绍
2020-10-29 20:57:04这也就意味着你可以在Linux下读取Excel文件。首先,打开workbook;复制代码 代码如下:import xlrdwb = xlrd.open_workbook('myworkbook.xls')检查表单名字:复制代码 代码如下:wb.sheet_names()得到第一张表单,两种... -
python读写二进制文件的方法
2021-01-20 04:36:42初学python,现在要读一个二进制文件,查找doc只发现 file提供了一个read和write函数,而且读写的都是字符串,如果只是读写char等一个字节的还行,要想读写如int,double等多字节数 据就不方便了。在网上查到一篇贴子... -
Ubuntu下使用python读取doc和docx文档的内容方法
2021-01-09 22:33:29读取docx文档 使用的包是python-docx 1. 安装python-docx包 sudo pip install python-docx 2. 使用python-docx包读取数据...python-docx这个包是不能处理doc文档的,要读取doc文档内容的话需要使用antiword这个工具。 -
python读取word文档的方法
2020-11-21 01:24:41本文实例讲述了python读取word文档的方法。分享给大家供大家参考。具体如下:首先下载安装win32com123456from win32comimport client as wcword= wc.Dispatch('Word.Application')doc= word.Documents.Open('c:/test... -
-
Python实现将doc转化pdf格式文档的方法
2020-12-25 15:41:30本文实例讲述了Python实现将doc转化pdf格式文档的方法。分享给大家供大家参考,具体如下: #-*- coding:utf-8 -*- # doc2pdf.py: python script to convert doc to pdf with bookmarks! # Requires Office 2007 SP2...