1.读取.doc 或者.docx
插件 | 优点 | 缺点 |
---|---|---|
python-docx | 跨平台 | 只能处理.docx |
pypiwin32 | 可以处理.doc 和.docx | 只能用于windows 平台 |
以docx结尾的word文件
首先是安装模块
pip install python-docx
读取段落或者是读取文档中插入的表格
from docx import Document
path = r"E:\docx.docx"
document = Document(path)
#读取段落
for paragraph in document.paragraphs:
print(paragraph.text)
#读取文档中的表格(包括合并的单元格)
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
print(cell.text)
以doc结尾的文件
首先是安装模块
python -m pip install pypiwin32
读取.doc
from win32com.client import Dispatch
word = Dispatch('Word.Application') # 打开word应用程序
# word = DispatchEx('Word.Application') # 启动独立的进程
word.Visible = 0 # 后台运行,不显示
word.DisplayAlerts = 0 # 不警告
path = r'test.doc'
doc = word.Documents.Open(FileName=path, Encoding='gbk')
for para in doc.paragraphs:
print(para.Range.Text)
doc.Close()
word.Quit
pypiwin32 在表格的读取上并不好用,所以将.doc格式的文件转换成.docx 格式, 然后再通过python-docx 来处理
import win32com.client as wc
def doSaveAas():
word = wc.Dispatch('Word.Application')
# 目标路径下的文件
doc = word.Documents.Open(r'test.doc')
# 转化后路径下的文件
doc.SaveAs(r'E:test.docx', 12, False, "", True, "", False, False, False, False)
doc.Close()
word.Quit()
doSaveAas()
2.转换成多个sheet 的excel
#导入docx 插件
import docx
import pandas as pd
from pandas.core.frame import DataFrame
##定义write 输出文件名字
writer = pd.ExcelWriter('test1.xlsx')
#目标路径
path=r"test.docx"
doc = docx.Document(path)
i=0
for paragraph in doc.paragraphs:
i=i+1
print("第{}段落".format(i))
print(paragraph.text)
#输出例子,观察数据发现,偶数段落是需要处理的数据名称,奇数段落是分类(要观察自己的数据找规律)
#根据规律我们可以将数据分成5组,也就是n=i/2,那么每一组就是 2n,2n+1,前两组数据无用,可以扔掉,直接从第三组开始;
for n in range(0,int((i/2)-2)):
#获取到奇数段,作为列名
colName=doc.paragraphs[2*n+4].text
#获取到偶数段,使用顿号分割,作为内容
contents=doc.paragraphs[2*n+5].text.split("、")
#将列名和内容组成一个df
df=DataFrame({colName:contents})
#使用列名作为sheet 名字,索引不输出。
df.to_excel(writer,sheet_name=colName,index=False)
writer.save()
数据样式
例子.png
转换结果
结果.png