提取Excel数据再处理
代码逻辑
- 文件
- 路径定义
- 删除旧文件
- Sheet
- 读取Sheet
- 遍历Sheet
- Sheet数据-读
- 提取报告列
- 通过“-”进行切割保存为数组
- APT组织名 = 报告数组[0]
- 报告披露时间 = 报告数组[2]
- 数据校验
- 2数组个数是否一致
- 数组个数与列数是否一致
- 提取报告列
- Sheet数据-写
- 新增“时间”列,并填入时间列表
- 列操作:在“组织列”填入提取的APT组织名列表
- 遍历Sheet
定义文件路径
excelIn = r”In-2.xlsx” excelOut = r”Out.xlsx”
健壮性:删除旧文件
if os.path.isfile(excelOut): os.remove(excelOut)
# print("已删除旧文件")
读取所有的Sheet
sheetAPTs = pd.ExcelFile(excelIn).sheet_names
print(sheetAPT) #type = list
注意:多Sheet时,ExcelWriter要写在循环外,不然会被覆盖
excelWriter = pd.ExcelWriter(excelOut)
遍历Sheet
for sheetAPT in sheetAPTs:
# read_excel读取遍历的Sheet# print("Sheet名:\t", sheetAPT)dfSheet = pd.read_excel(excelIn, sheet_name=sheetAPT)# print(dfSheet)# 提取“报告”列seriesTittle = dfSheet['报告']# print(seriesTittle)# 将报告名转为字符串listTittle = seriesTittle.to_list()# print("所有报告:", listTittle)arrAPT = []arrDate = []for tittle in listTittle:# print("报告:", tittle)listSplitStr = tittle.split('-')# print(listSplitStr)strAPT = listSplitStr[0]# print(strAPT)arrAPT.append(strAPT)strDate = listSplitStr[1]# print(strDate)arrDate.append(strDate)# print("组织名:\t\t", arrAPT)# print("报告时间:\t", arrDate)# 健壮性:检测时间个数是否是行数nRows = len(dfSheet)nAPT = len(arrAPT)nDate = len(arrDate)if nRows != nAPT != nDate:print("有报告标题不符合格式")print("列数为:", nRows)print("提取出的时间个数为:", nDate)sys.exit()# 列操作:新增“时间”列,并填入时间列表dfSheet.insert(len(dfSheet.columns), '时间', arrDate)# 列操作:在“组织列”填入提取的APT组织名列表dfSheet['组织'] = arrAPT# 使用to_excel保存SheetdfSheet.to_excel(excelWriter, sheetAPT, index=False)
保存Excel
excelWriter.save() excelWriter.close()
print(‘Python脚本已运行完毕’)
<a name="ycbEh"></a>## 弃用代码```python# 正则提取时间# (?<=exp) :定义目标字符串起始位置要求# (?=exp) :定义目标字符串结束位置要求# [\d.]{8} :8个数字或“.”长度的字符串arrayDate = re.findall("(?<=-)[\d.]{8}(?=-)", listTittle)print(arrayDate)
