Python-docx库与数据处理

Python是一种强大的编程语言,特别擅长自动化任务。它拥有众多库,使得创建可重用的代码变得简单。其中之一便是python-docx库。这个库在文档处理方面非常有用,功能包括但不限于:

  • 添加标题
  • 读取段落
  • 写入段落
  • 添加图片
  • 创建和保存文档文件
  • 查找和替换文本
  • 操作现有文档文件
  • 添加分页符等

本文将特别讨论Docx库的一个功能:创建与文档中表格数量相同的数据帧,以便之后可以将这些表格存储为单独的文件(如CSV),方便使用。尽管Python-Docx库可以创建和更新Microsoft Word文件,本文将使用它来:

  • 打印文档中的每个段落。
  • 读取Word文档中的所有表格并将其转换为数据帧。
  • 打印每个段落的字数以及文档的总字数。

虽然该库的文档有限,但可以通过以下链接进行进一步阅读:

理解数据帧

在开始编码之前,简要讨论一下数据帧。数据帧是二维的表格数据结构,由行和列组成,包含不同类型的元素。例如,如果考虑一个“员工”数据帧,列可以是“姓名”、“年龄”、“性别”、“薪水”、“入职日期”。上述数据帧的结果结构如下:

从上述图形中,可以看到不同类型的组件。例如,姓名是字符串类型数据,年龄是数字,性别是字符,薪水是双精度,入职日期是日期类型字段。可以使用列表、字典或简单地导入文件来创建数据帧。大多数数据分析、数据操作、提取等工作都可以在将数据作为数据帧获取后进行。

将使用以下文档进行编码,如下所示。该文档包含两个表格。因此,代码也将创建两个数据帧。

理解Python中的函数

函数是执行特定任务的命令集合。函数避免了重复,是创建可重用组件的好方法。它将程序分解为模块。它使代码更容易管理和理解。函数使用关键字“def”在Python中编写。它后面跟着唯一的函数名和传递参数。冒号(:)标志着函数头的结束。函数可以有返回语句或没有返回语句。返回语句标志着函数的退出。然后控制返回到调用地点。这取决于编写函数的任务的性质。可以使用函数名在另一个函数或程序中调用函数。如果函数定义为接受参数,可以传递参数。

在本文中,定义了一个名为“create_df_from_table”的函数。它接受两个参数。它们是“c”和“tab”。第一个参数是一个整数,其值从0开始。第二个参数是“document.tables”的表格输出。

实现

将使用两个库——Docx和pandas。Python-Docx是一个可以处理Microsoft Word文件的Python库。Pandas是一个用于分析数据的Python库。

import docximport pandas as pd

让创建一个名为testdoc.docx的示例Word文档文件。该文档文件包含一个标题。有两个表格和两个段落。第一个表格有四行三列,不包括标题行。第二个表格有两行两列,不包括标题行。“Document”对象用于读取Docx文件。

document = docx.Document('testdoc.docx')

文档中有两个段落。标题也被视为一个段落。文档中的两个表格在Docx模块中不被视为段落。当运行以下命令时,会显示两个段落以及文档标题。

para_text_list = []for each_par in document.paragraphs: print(each_par.text) para_text_list.append(each_par.text)

将创建一个可重用的函数来读取表格。函数应该创建,以便它找到文档中的所有表格并为所有表格创建单独的数据帧。在此定义中,假设每个表格都有一个标题。第一行将被视为列名,其余的作为行值。将为数据帧名称加上前缀“result_df_”,计数从0开始。例如,如果Word文档中有三张表格,那么创建的数据帧名称是result_df_0、result_df_1和result_df_2。

def create_df_from_table(c, tab): list_name = str(c)+"_result_list" list_name = [] for i, each_row in enumerate(tab.rows): text = (each_cell.text for each_cell in each_row.cells) if i == 0: keys = tuple(text) else: each_dict_val = dict(zip(keys, text)) list_name.append(each_dict_val) result_df = pd.DataFrame(list_name) return result_dffor c, each_tab in enumerate(document.tables): globals()[f'result_df_{c}'] = create_df_from_table(c, each_tab)

如上所示,创建了两个数据帧。

将计算Word文档每个部分的长度。使用“len”和“sum”函数来找到字数。

words_each_list = [len(each_sent.split()) for each_sent in para_text_list]print(words_each_list)total_no_of_words = sum(words_each_list)print(total_no_of_words)
  • 节省开发时间——编写可以集成并在另一个应用程序中使用的代码片段,可以节省更多关键开发的时间。
  • 提供结构——虽然所有的自动化代码可以放在一个地方,但它给开发人员提供了良好的外观和可理解性。
  • 降低风险——当代码开发完成后,在部署之前会进行漏洞检查。这些检查可以很容易地避免。
  • 易于维护——产品很容易维护。一个地方的修复可以导致所有相互关联的组件的整体修复。
  • 高效的工作方式——函数可以放在一个中心位置,并且可以根据需要使用。这将使程序更加模块化和整洁。
  • 探索了Docx库——
    • 可以使用pip install python-docx在Python中安装Docx库。
    • 使用Docx模块可以执行保存Docx文件、添加段落、突出显示文档中的短语、在文档中添加图片、添加标题、更改字体属性等操作。
    • 创建了一个可重用的函数,将所有表格转换为数据帧。
  • 简要了解了数据帧。
  • 讨论了编写可重用代码的重要性。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485