下面这个直接用是不行的,要修改一下几个地方
- docxurl:指的是你存放docx文件的目录
- xlsx1url:指的是你写入xlsx文件的绝对路径
- xlsx2url:指的是你在内存中操作完xlsx文件之后要把他存放到哪
- returndata:每个人要求的数据格式不一样,这个需要根据你自己的数据来更新规则
#操作系统文件目录
import os
#操作docx的模块
from docx import Document
#操作excel文件模块
import pandas as pd
from pandas import DataFrame
#接受一个文件目录,返回一个包含文件名的数组
def returnrootdata(url):
#这里自动筛选docx文件
return [url+"\\"+i for i in os.listdir(url) if i.split(".")[1] == "docx"]
#接收一个docx的绝对路径,返回一个字典
def returndata(url):
tb = Document(url).tables
name = tb[0].rows[0].cells[1].text
phone = tb[0].rows[2].cells[7].text
sex = tb[0].rows[1].cells[7].text
studentid = tb[0].rows[1].cells[1].text
sfzid = tb[0].rows[1].cells[4].text
address = tb[0].rows[3].cells[1].text
parent = tb[0].rows[4].cells[2].text
parentph = tb[0].rows[4].cells[-1].text
return {'姓名':name,'联系电话':phone,'性别':sex,'学号':studentid,'身份证号':sfzid,'现居住地':address,'家长姓名':parent,'家长联系方式':parentph}
#接收含有文件名的数组返回一个数组,元素为字典,包括
def returnappdata(data):
dataappend = []
for i in range(len(data)):
#构建当前路径的字符串
filedir = r""+data[i]
dataappend.append(returndata(filedir))
return dataappend
# 接收一个模板文件的路径以及生成目录的路径,以及要写入的字典数组
def aend(url1,url2,appdata):
#打开文件
df = pd.read_excel(url1)
for i in appdata:
df = df.append(i,ignore_index=True)
DataFrame(df).to_excel(url2, sheet_name='Sheet1', index=False, header=True)
if __name__== "__main__":
# 设置需要获取,总结的docx文件目录
docxurl = r"C:\wenjian"
# 设置要写入的xlsx的文件路径
xlsx1url = r"C:\1.xlsx"
# 设置需要生成的文件的绝对位置,例如:C:\2.xlsx"
xlsx2url = r"C:\2.xlsx"
#获取目标文件夹下所有docx文件绝对路径
rootdata = returnrootdata(docxurl)
'''
》》》['C:\\Users\\Huawei\\Desktop\\1.docx',
'C:\\Users\\Huawei\\Desktop\\2.docx',
'C:\\Users\\Huawei\\Desktop\\3.docx']
'''
#获取目标文件里所需要的数据
appdata = returnappdata(rootdata)
'''
》》》[{'姓名': 'w', '联系电话': '1212311213', '性别': '女', '学号': '17382', '身份证号': '291629361231', '现居住地': '杭州', '家长姓名': 'w', '家长联系方式': '12312332'},
{'姓名': 'e', '联系电话': '1212221213', '性别': '女', '学号': '17222', '身份证号': '291629312221', '现居住地': '杭州', '家长姓名': 'we', '家长联系方式': '12312232'}】
'''
# 写入文件
aend(xlsx1url,xlsx2url,appdata)