现在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。



可以看到初版还是可以的,但是有3个问题,第一我们不需要分这么多张sheet,第二我们不需要这dummy的 xx(xx.xx);第三发现表格输出了组别,但是我们可能只需要第一列的内容就好了,
所以我们继续提需求,告诉chatgpt我们只需要两张sheet,一张输出所有的title,另一个sheet输出表格的第一列和listing所有的header



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

后面的代码我就发到我的读者付费群了。
所以利用python读取word很方便,主要还是有chatgt的帮助,但是如果只是照搬chatgpt的代码,如果报错了,你不了解python的语法的话,也不知道错在哪,所以还是需要了解一些python的基本语法吧。
太累了,啥都得学,有读者公司已经用R compare数据集了,
网友评论