python 多表循环写进一个表的不同Sheet,使用ExcelWriter仍然覆盖第一个Sheet

博客讲述了在处理多个Excel文件并写入到单个文件时遇到的问题及解决方案。原来错误的做法是每次读取一个文件就创建一个ExcelWriter并保存,导致覆盖。修正方法是将ExcelWriter置于循环外部,先打开,然后循环读取每个文件并写入不同工作表,最后一次性保存,成功避免了覆盖问题。
摘要由CSDN通过智能技术生成

debug的时候,path正确,Sheet名正确,还是覆盖,一直成功不了
已解决
原因是ExcelWriter的位置问题,ExcelWriter要放在循环外面,
之前是:读一次,打开,写一次,保存;
修改后:打开,读一次写一次,读一次写一次,保存;
这样就可以正常写入了

import pandas as pd
import numpy as np
import re
import os
import warnings
import time
warnings.filterwarnings('ignore')
path=r'C:\Users\feng\Desktop\分组数据\F'
today_date = time.strftime("%Y%m%d", time.localtime(time.time()))
L={}
for root, dirs, files in os.walk(path):
    for file in files:
        if os.path.splitext(file)[1] == '.xlsx':
            if file.split("_")[0] in L:
                A=L[file.split("_")[0]]
                A.append(os.path.join(root, file))
                L[file.split("_")[0]]=A
            else:
                L[file.split("_")[0]]=[os.path.join(root, file)]
# print(L)

前面这段是字典嵌套列表,用字典的键对应人名,值对应文件名,把值用列表表示
后面循环列表写进同一个Excel表里

修改之后成功:

for key, value in L.items(): 
    i=L[key][0]
    print(key)
    depart=i.split("\\")[-2]
    path1=r'C:\Users\feng\Desktop\分组数据\F'+'\\'+'Sheet汇总'+'\\'
    if not os.path.exists(path1):
        os.mkdir(path1)
    path2=path1+depart+'-广告'+today_date+"\\"
    if not os.path.exists(path2):
        os.mkdir(path2)
    path3=path2+key+'-广告'+today_date+'.xlsx'
    with pd.ExcelWriter(path3) as writer:
        for a in L[key]:
            name=a.split("\\")[-1].split('_')[1]
            print(name)
            df=pd.read_excel(a)
            df.to_excel(excel_writer=writer,sheet_name=name,index=None)
        writer.save()

原先的错误代码:

for key, value in L.items(): 
    for i in list(value.split(',')):
        print(i)
        # print(df)
        depart=i.split("\\")[-2]
        path1=os.path.dirname(i)+"\\"+depart+"\\"
        path2=os.path.dirname(i)+"\\"+depart+"\\"+key+'.xlsx'
        if not os.path.exists(path1):
            os.mkdir(path1)
        # print(path2)
        name=i.split("\\")[-1].split('_')[1]
        # print(name)
        df=pd.read_excel(i)
        # writer=pd.ExcelWriter(path2)
        with pd.ExcelWriter(path2) as writer:
            df.to_excel(excel_writer=writer,sheet_name=name,index=None)
        # df.to_excel(writer,name,index=False)
    writer.save()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值