提取Excel数据再处理

代码逻辑

  1. 文件
    1. 路径定义
    2. 删除旧文件
  2. Sheet
    1. 读取Sheet
    2. 遍历Sheet
  3. Sheet数据-读
    1. 提取报告列
      1. 通过“-”进行切割保存为数组
      2. APT组织名 = 报告数组[0]
      3. 报告披露时间 = 报告数组[2]
    2. 数据校验
      1. 2数组个数是否一致
      2. 数组个数与列数是否一致
  4. Sheet数据-写
    1. 新增“时间”列,并填入时间列表
    2. 列操作:在“组织列”填入提取的APT组织名列表
  5. 遍历Sheet
    1. 前:使用“ExcelWriter”定义输出Excel
    2. 中:使用“to_excel”保存单个Sheet
    3. 后:使用“.save()”“.close()”对“ExcelWriter”保存后关闭

      🐍Python代码🐍

      ```python import os import sys import pandas as pd

定义文件路径

excelIn = r”In-2.xlsx” excelOut = r”Out.xlsx”

健壮性:删除旧文件

if os.path.isfile(excelOut): os.remove(excelOut)

  1. # print("已删除旧文件")

读取所有的Sheet

sheetAPTs = pd.ExcelFile(excelIn).sheet_names

print(sheetAPT) #type = list

注意:多Sheet时,ExcelWriter要写在循环外,不然会被覆盖

excelWriter = pd.ExcelWriter(excelOut)

遍历Sheet

for sheetAPT in sheetAPTs:

  1. # read_excel读取遍历的Sheet
  2. # print("Sheet名:\t", sheetAPT)
  3. dfSheet = pd.read_excel(excelIn, sheet_name=sheetAPT)
  4. # print(dfSheet)
  5. # 提取“报告”列
  6. seriesTittle = dfSheet['报告']
  7. # print(seriesTittle)
  8. # 将报告名转为字符串
  9. listTittle = seriesTittle.to_list()
  10. # print("所有报告:", listTittle)
  11. arrAPT = []
  12. arrDate = []
  13. for tittle in listTittle:
  14. # print("报告:", tittle)
  15. listSplitStr = tittle.split('-')
  16. # print(listSplitStr)
  17. strAPT = listSplitStr[0]
  18. # print(strAPT)
  19. arrAPT.append(strAPT)
  20. strDate = listSplitStr[1]
  21. # print(strDate)
  22. arrDate.append(strDate)
  23. # print("组织名:\t\t", arrAPT)
  24. # print("报告时间:\t", arrDate)
  25. # 健壮性:检测时间个数是否是行数
  26. nRows = len(dfSheet)
  27. nAPT = len(arrAPT)
  28. nDate = len(arrDate)
  29. if nRows != nAPT != nDate:
  30. print("有报告标题不符合格式")
  31. print("列数为:", nRows)
  32. print("提取出的时间个数为:", nDate)
  33. sys.exit()
  34. # 列操作:新增“时间”列,并填入时间列表
  35. dfSheet.insert(len(dfSheet.columns), '时间', arrDate)
  36. # 列操作:在“组织列”填入提取的APT组织名列表
  37. dfSheet['组织'] = arrAPT
  38. # 使用to_excel保存Sheet
  39. dfSheet.to_excel(excelWriter, sheetAPT, index=False)

保存Excel

excelWriter.save() excelWriter.close()

print(‘Python脚本已运行完毕’)

  1. <a name="ycbEh"></a>
  2. ## 弃用代码
  3. ```python
  4. # 正则提取时间
  5. # (?<=exp) :定义目标字符串起始位置要求
  6. # (?=exp) :定义目标字符串结束位置要求
  7. # [\d.]{8} :8个数字或“.”长度的字符串
  8. arrayDate = re.findall("(?<=-)[\d.]{8}(?=-)", listTittle)
  9. print(arrayDate)