美文网首页
347:利用python读取word文档

347:利用python读取word文档

作者: SASPRO的打工人生活 | 来源:发表于2024-07-27 11:08 被阅读0次

    现在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数据集了,

    相关文章

      网友评论

          本文标题:347:利用python读取word文档

          本文链接:https://www.haomeiwen.com/subject/euavhjtx.html