添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
from docx.document import Document from docx.table import _Cell, Table from docx.oxml.text.paragraph import CT_P from docx.text.paragraph import Paragraph from docx.oxml.table import CT_Tbl import pandas as pd

该部分主要使用了 docx 库和 pandas 库。

2.读取word文档对象

doc = docx.Document('test.docx')

3.编写能依次遍历文档内容的函数

'''依次遍历文档内容的函数'''
def iter_block_items(parent):
    # 判断传入的是否为word文档对象,是则获取文档内容的全部子对象
    if isinstance(parent, Document):
        parent_elm = parent.element.body
    # 判断传入的是否为单元格,是则获取单元格内全部子对象
    elif isinstance(parent, _Cell):
        parent_elm = parent._tc
    else:
        raise ValueError("something's not right")
    # 遍历全部子对象
    for child in parent_elm.iterchildren():
        # 判断是否为段落,是则返回段落对象
        if isinstance(child, CT_P):
            yield Paragraph(child, parent)
        # 判断是否为表格,是则返回表格对象
        if isinstance(child, CT_Tbl):
            yield Table(child, parent)

yieldreturn用法相似,yield在返回结果后,第二次调用该函数的时候将会是接着yield之后开始进行执行。所以第二次之后执行该函数是都在for循环里面,直到遍历完word内容的全子对象。

4.处理表格对象数据

'''获取表格数据,转换为dataframe数据结构'''
def get_table_dataframe(table):
    date = []
    keys = None
    for i, row in enumerate(table.rows):
        # 获取表格一行的数据
        text = (cell.text for cell in row.cells)  # text为generator生成器类型
        # 判断是否是表头
        if i == 0:
            keys = tuple(text)
            continue
        date.append(dict(zip(keys, text)))  # zip方法,按列打包为元组的列表。再转换为字典
    df = pd.DataFrame(date)  # pd依赖的DataFrame方法将字典数据转换成列表集
    return df

5.遍历word文档对象

# 遍历word文档,最后调用函数没有返回值时停止遍历
for block in iter_block_items(doc):
    # print(block.style.name)
    # 判断是否是表格
    if block.style.name == 'Table Grid':
        df = get_table_dataframe(block)
        print(df)
    # 判断该子对象是否是正文
    elif block.style.name == 'Normal':
        print(block.text)
    # 判断是否为标题1。如果是Heading 2则判断是否为标2,以此类推。
    elif block.style.name == 'Heading 1':
        print(block.text)

运行效果如下:

这是标题1
这是正文的一段话。下面是表格。
   1  2  3
0  1  1  2
1  3  1  2
2  3  1  3
这是正文的一段话。上面是表格

6.保存表格对象数据

(1)保存到csv

# path为:保存路径+文件名.csv。sep表示用逗号分隔,index是否要索引,header是否要列名
df.to_csv(path, sep=',', index=False, header=True, encoding='utf_8_sig')

(2)保存到excel

# path为:保存路径+文件名.xlsx。
df.to_excel(path, index=False, header=True, encoding='utf_8_sig')

7.读取表格数据

如果之后还需要读取在csv或者excel中的数据,我们可以用一下方法获取数据。
(1)从csv中读取

df = pd.read_csv(path)

(2)从excel中读取

# 读取工作簿第一个表
df = pd.read_excel(path, sheet_name='Sheet1')
                                    原版链接:实现方法:找到所需文档用的起始光标和结束光标,然后进行复制即可。浅说一下这里:用代码 search_range.Find.Execute(FindText=“标题一”)查找到标题一再用search_range.Select()选取标题一最后 word.Selection.MoveLeft()光标左移start = word.Selection.Start.numerator找到位置# 光标start的查找# 赋值对象# 查找内容。
                                    小福利,教你用Python读取文件夹下面的所有word文档
解决问题要换多种思路,多去寻找答案,也许你苦苦不能解决的问题,前面早就有大神帮你解决过了。
感谢前面探路的大神,对你们表示崇高的敬意。
import docx
from win32com import client as wc
import matplotlib.pyplot as plt
from collections import Counter
import os
path = r'D:\\abc'
files_list = os.li
                                    我们平时工作的时候会有很多的时候会遇到需要将word里面的有些杂乱的数据格式化到Excel中去,但是如果手动操作那真是【超级无语】,很崩溃,几百页的word让你慢慢复制粘贴,会死掉的。所以我们需要使用程序来完成,使用python先通过【docx】的包将word中的文字逐行读取出来,再根据行的数据格式进行数据清洗,清洗成对应的列表数据,批量写入Excel即可,这里我写入的是【CSV】文件,也可以通过Excel直接打开的。
                                    这是我第一次在这里发表文章,我想写一个脚本,以docx作为输入,并选择某些段落(包括表格和图像)以相同的顺序复制到另一个模板文档中(而不是最后)。我遇到的问题是,当我开始迭代元素时,我的代码无法检测到图像,因此我无法确定图像相对于文本和表格的位置,也无法确定它是哪个图像。简而言之,我得到了doc1:文本图像文本表文本最后我要说的是:文本[图像丢失]文本表文本到目前为止我得到的结果是:-我可以重复段...
path = "E:\\python_data\\1234.docx" #文件路径
document = Document(path) #读入文件
tables = document.tables #获取文件中的表格集
table = tables[0 ]#获取文件中的第一个表格
for i in range...
                                    然后:通过遍历表格第一行,找出其中含有“解释口径”的那一列,通过函数find将列名提取出来。然后将该列通过set()去除重复的单元格,将不需要的信息剔除,存入列表中的第四个位置。前三个位置通过分离文件路径存入场景id,节点名称,excel表格名称。首先:通过os模块获取文件的路径,判断该路径是文件还是路径,保存文件路径。输出:场景id,节点名称,excel表格名称,口径。任务需要提取一个三级文件夹下面的xlsx表格的需要获取文件路径,特定列,以及去掉每个表格特定列中相同内容。
                                    董付国老师面向计算机相关专业的教材《Python程序设计(第2版)》和面向非计算机专业的教材《Python程序设计基础(第2版)》同时被评为清华大学出版社2019年度畅销图书。封面图片:...