347:利用python读取word文档

2024-07-27  本文已影响0人  SASPRO的打工人生活

现在chatgpt的应用,极大地方便了我们利用其他编程语言实现一些小小的开发需求。

比如利用python读取word文档,刚好前段时间有人问如何用SAS读取word文档,说实话我不知道,搜了一下,用SAS读取word很麻烦或者说不能实现,但是利用python的话,就很方便了。

我还记得以前刚参加工作的时候,前公司还是手动一行一行将shell的title和脚注复制到excel上,形成一个toc文件,之后再导出成数据集,费时费力,注释CRF应该也是手动的,只有你自己亲身注释过CRF,即使是手动一个一个复制注释都很累,而且效率极低极低,所以这就是为什么现在恒压一直强调自动化的意义,尤其是现在更卷了,

所以今天就讲一下利用chatgpt和python如何读取统计师出的shell。先跟chatgtp提需求:“python如何读取word文档中的标题和表格”,这里用到了python里面的docx库,我用的编辑器是pycharm,当然下载安装也出了不少问题,但是目前都解决了,也做了笔记

下面是chatgpt给出的代码,不得不说,真牛逼,正确率是100%啊,代码一复制,程序运行没有报一个错,报错也是因为自己没有理解python的语法格式。

比如下面第8行的doc_path,我以为一开始就得定义具体的路径和具体的文件,所以我换成了自己路径下的shell文件,但是总是报错,实际上是不需要的,这里的doc_path实际上是一个形参,类似于SAS中我们先定义宏参数。

from docximport Document

import openpyxl

def extract_headings_and_tables(doc_path):

# 打开Word文件

    doc = Document(doc_path)

# 创建列表来存储标题和表格

    headings = []

tables = []

# 遍历文档的每个段落,检查其样式

    for parain doc.paragraphs:

if para.style.name.startswith('Heading'):

headings.append((para.style.name, para.text))

# 遍历文档的每个表格

    for tablein doc.tables:

table_data = []

for rowin table.rows:

row_data = []

for cellin row.cells:

row_data.append(cell.text)

table_data.append(row_data)

tables.append(table_data)

return headings, tables

def print_headings_and_tables(headings, tables):

# 打印标题

    print("Headings:")

for style, textin headings:

print(f"{style}: {text}")

# 打印表格

    print("\nTables:")

for i, tablein enumerate(tables,start=1):

print(f"\nTable {i}:")

for rowin table:

print("\t".join(row))

def save_headings_and_tables_to_excel(headings, tables, excel_path):

# 创建一个新的Excel工作簿

    wb = openpyxl.Workbook()

# 创建一个工作表用于标题

    ws_headings = wb.active

ws_headings.title ="Headings"

    # 写入标题到Excel文件

    for i, (style, text)in enumerate(headings,start=1):

ws_headings.cell(row=i,column=1,value=style)

ws_headings.cell(row=i,column=2,value=text)

# 创建工作表用于表格

    for i, tablein enumerate(tables,start=1):

ws_table = wb.create_sheet(title=f"Table {i}")

for row_idx, rowin enumerate(table,start=1):

for col_idx, cellin enumerate(row,start=1):

ws_table.cell(row=row_idx,column=col_idx,value=cell)

# 保存Excel文件

    wb.save(excel_path)

# 指定Word文件路径

word_file_path =r'D:\practice\wordtest\toc.docx'

# 提取标题和表格

headings, tables = extract_headings_and_tables(word_file_path)

# 打印标题和表格

print_headings_and_tables(headings, tables)

# 指定Excel文件路径

excel_file_path =r'D:\practice\wordtest\headings_and_tables.xlsx'

# 保存标题和表格到Excel文件

save_headings_and_tables_to_excel(headings, tables, excel_file_path)

print(f"Headings and tables have been saved to {excel_file_path}")

下面是python输出的excel它给我shell所有的标题输出成了一张sheet,然后每张TFL单独输出一张sheet。

table: listing

可以看到初版还是可以的,但是有3个问题,第一我们不需要分这么多张sheet,第二我们不需要这dummy的 xx(xx.xx);第三发现表格输出了组别,但是我们可能只需要第一列的内容就好了,

所以我们继续提需求,告诉chatgpt我们只需要两张sheet,一张输出所有的title,另一个sheet输出表格的第一列和listing所有的header

可以看到现在已经相对挺完美的,但是假设我还需要将listing的header垂直输出,也可以轻松做到,但是发现窜表了,完成实验的输出了人口学信息,不管了。

后面的代码我就发到我的读者付费群了。

所以利用python读取word很方便,主要还是有chatgt的帮助,但是如果只是照搬chatgpt的代码,如果报错了,你不了解python的语法的话,也不知道错在哪,所以还是需要了解一些python的基本语法吧。

太累了,啥都得学,有读者公司已经用R compare数据集了,

上一篇下一篇

猜你喜欢

热点阅读