Phyton从不同目录读取数据并合并成一个excel文件

问题描述

我只是 Phyton 的初学者。现在尝试使用phyton合并来自不同目录的excel文件

我有一个如下所示的代码。然而,当执行时只读取一个文件,其他 2 个文件不会合并到最终的 excel 文件中。我应该在哪里更改代码

预先感谢您的帮助。

真诚的 凯雷姆

import glob
import pandas as pd
import os

#path = r'E:\Users\KEREMH\.spyder-py3\20210326GecikmedekiMusteriler'

subelistesi = ['1140','1150','1190']

klasor_adi= input('Klasör Adı: ')
gonderilen ='gonderilen'

for sube in subelistesi:

    path = os.path.join(os.getcwd(),sube,klasor_adi,gonderilen )

    filenames = glob.glob(path +  "/*.xlsx")
    
    print(filenames)

for file in filenames:

    concat_all_sheets_all_files = pd.DataFrame()

    df = pd.read_excel(file,sheet_name=None,skiprows=None,nrows=None,usecols=None,header=None,index_col=None)
    concat_all_sheets_single_file = pd.concat(df,sort=False)
    concat_all_sheets_single_file['filename']=os.path.basename(file)
    concat_all_sheets_all_files = concat_all_sheets_all_files.append(concat_all_sheets_single_file)
  
         
writer = pd.ExcelWriter(r'E:\Users\KEREMH\.spyder-py3\Konsolide.xlsx')
concat_all_sheets_all_files.to_excel(writer)
writer.save()
print(concat_all_sheets_all_files)

解决方法

当您遍历 subelistesi 时,只会保留 filenames 的最后一个值。更好的方法是在任何循环之前创建一个列表,并将所有数据帧添加到其中,然后在循环完成后进行连接。

import glob
import pandas as pd
import os

#path = r'E:\Users\KEREMH\.spyder-py3\20210326GecikmedekiMusteriler'

subelistesi = ['1140','1150','1190']

klasor_adi= input('Klasör Adı: ')
gonderilen ='gonderilen'

all_dfs = [] # new list here

for sube in subelistesi:

    path = os.path.join(os.getcwd(),sube,klasor_adi,gonderilen )

    filenames = glob.glob(path +  "/*.xlsx")
    
    print(filenames)

    for file in filenames:

        concat_all_sheets_all_files = pd.DataFrame()

        df = pd.read_excel(file,sheet_name=None,skiprows=None,nrows=None,usecols=None,header=None,index_col=None)
        df['filename'] = os.path.basename(file)
        all_dfs.append(df)
        

concat_all_sheets_all_files = pd.concat(all_dfs,axis=0)

         
writer = pd.ExcelWriter(r'E:\Users\KEREMH\.spyder-py3\Konsolide.xlsx')
concat_all_sheets_all_files.to_excel(writer)
writer.save()
print(concat_all_sheets_all_files)