提取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保存Sheet
dfSheet.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)